需要在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); 

这个

+2

因为'[^ .php]'匹配除'.','p'和**'h' **以外的字符。你的意图是什么?顺便说一句,它看起来像你没有发布正确的代码,示例字符串根本不匹配 –

+1

它不匹配任何东西,因为你的字符串中没有'docs'。请显示真实的代码。 – Toto

+0

@WiktorStribiżew我想要我在上面提到的结果(XXXX/YYYYY/hello_a_13_a_12_h或XXXX/YYYYY/hello_a_13_a_12_p),当我通过preg_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

+0

请不要在'测试'中更改代码。因为一些文字有所不同。 –

+0

没问题,检查我的更新 – RomanPerekhrest

+0

请看我的问题,它已更新。 –