在php中需要正确的preg_match

时间:2017-03-02 13:41:40

标签: php preg-match

我有一个preg_match表达式,如下所示,

$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);

请就此提出建议

2 个答案:

答案 0 :(得分:0)

使用以下正则表达式模式:

$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)确保)

答案 1 :(得分:0)

最后,我找到了一个表达式来获取输入参数的正确输出,

preg_match('/(docs.+)(?=.php)/', $input_string, $match); 

感谢您的回复。上面的表达式一直返回预期的输出。