需要在PHP
问题描述:
正确的preg_match我有一个的preg_match表达类似下面,需要在PHP
$is = 'rest("docs/lasit_uct/iii_a_3_a_1_r.php?hostimage=&hostvista=")';
preg_match('/docs\/*.[^.php]*/', $is, $match);
result is => XXXX/YYYYY/hello_a_13_a_12_r
但是当我通过其他参数如下图所示,
$is = 'rest("docs/lasit_uct/iii_a_3_a_1_i.php?hostimage=&hostvista=")';
preg_match('/docs\/*.[^.php]*/', $is, $match);
result is => XXXX/YYYYY/hello_a_13_a_12_
最后一个字符'h'缺失。这是为什么?。当我传递字符'p'时,我也面临同样的问题。我也需要在获得h的表达式中做什么改变。
我试着下面的代码来得到正确的输出..但没有运气。
preg_match('/(docs\/.?).php/', $onClickLink, $match);
和
preg_match('/docs\/.+\((.+)(?=.php)/', $onClickLink, $match);
这个
答
终于让我找到了获得正确的输出为我的输入参数的表达式(由前瞻积极的断言(?=.php)
保证),
preg_match('/(docs.+)(?=.php)/', $input_string, $match);
感谢您的回复。上面的表达式一直返回预期的输出。
答
使用请咨询下面的正则表达式:
$re = '/docs\/.+\((.+)(?=.php)/';
preg_match($re, 'docs/test(XXXX/YYYYY/hello_a_13_a_12_h.php?t1=23&t2=45', $match);
print_r($match[1]);
输出:
XXXX/YYYYY/hello_a_13_a_12_h
(.+)(?=.php)
- 匹配字符序列(.+)
随后是.php
因为'[^ .php]'匹配除'.','p'和**'h' **以外的字符。你的意图是什么?顺便说一句,它看起来像你没有发布正确的代码,示例字符串根本不匹配 –
它不匹配任何东西,因为你的字符串中没有'docs'。请显示真实的代码。 – Toto
@WiktorStribiżew我想要我在上面提到的结果(XXXX/YYYYY/hello_a_13_a_12_h或XXXX/YYYYY/hello_a_13_a_12_p),当我通过preg_match中的参数 –