PHP使用正则求解~

yuaccp2 发布于 2011/06/09 12:18
阅读 312
收藏 0
PHP

不加“*”,就匹配不出结果。这样'/(\w+)_(\w+)_(\w+)_(\w+)\.php$/'结果为空~

不理解为何?求解

代码如下:

$pattern = '/(\w+)_*(\w+)_(\w+)_(\w+)\.php$/';
preg_match($pattern,'buysafe_checkoutprocess_logic.php',$arr);
var_dump($arr);
array   0 => string 'buysafe_checkoutprocess_logic.php' (length=33) 
        1 => string 'buysaf' (length=6) 
        2 => string 'e' (length=1)  
        3 => string 'checkoutprocess' (length=15) 
        4 => string 'logic' (length=5)
加载中
0
eval
eval
同学,你的正则表达式有三个下划线,而要匹配的字符串中只有两个,看清楚点了
0
yuaccp2
yuaccp2

引用来自“phpcake”的答案

同学,你的正则表达式有三个下划线,而要匹配的字符串中只有两个,看清楚点了
谢谢,确实如此~四个“_”匹配三个是空的。。一时疏忽了~~ 不过疑惑的是加了*号,是如何解析的?
0
eval
eval
*号表示多个或零个匹配, 因为少一个下划线,*前面的下划线就可以忽略,你的表达式里有四个 (\w+),加号表示至少一个匹配,有四个单词元素,‘e’就因为回溯单独被匹配出来------我的表达能力不强,你理解了么
0
匿名t3a
匿名t3a
/([a-z]+)_([a-z]+)_([a-z]+)\.php$/i
0
yuaccp2
yuaccp2

引用来自“phpcake”的答案

*号表示多个或零个匹配, 因为少一个下划线,*前面的下划线就可以忽略,你的表达式里有四个 (\w+),加号表示至少一个匹配,有四个单词元素,‘e’就因为回溯单独被匹配出来------我的表达能力不强,你理解了么

非常谢谢,大致上明白了。会匹配四个元素,字符串至少包含两个“_”。

个人解析见解:先匹配出后面两个_(\w+)_(\w+),如例子的“_(checkoutprocess)_(logic)”

(\w*)_*(\w+) 这个就有点难理解了 应该是(buysafe)_(c),才对,怎么是buysaf 跟e

返回顶部
顶部