关于php正则表达式的两点备注

王朝php·作者佚名  2006-01-08
宽屏版  字体: |||超大  

several tips about Regular Expressions

1. process for "greedy"

By default, the quantifiers are "greedy", that is, they

match as much as possible (up to the maximum number of per-

mitted times), without causing the rest of the pattern to

fail. The classic example of where this gives problems is in

trying to match comments in C programs. These appear between

the sequences /* and */ and within the sequence, individual

* and / characters may appear. An attempt to match C com-

ments by applying the pattern

/\*.*\*/

to the string

/* first command */ not comment /* second comment */

fails, because it matches the entire string due to the

greediness of the .* item.

However, if a quantifier is followed by a question mark,

then it ceases to be greedy, and instead matches the minimum

number of times possible, so the pattern

/\*.*?\*/

小结:

?与/U有类似功能,但同时出现彼此抵消

如下:

<?

$a = "asdf/*asdfaldsfasdf*/asfdasldf;kfldsj*/asfddsaf";

$pattern = "/\/\*.*?\*\//";

//$pattern = "/\/\*.*\*\//U";

//$pattern = "/\/\*.*?\*\//U";

preg_match($pattern,$a,$match);

print_r($match);

?>

2.Assertions

\w+(?=;)

matches a word followed by a semicolon, but does not include

the semicolon in the match, and

foo(?!bar)

matches any occurrence of "foo" that is not followed by

"bar". Note that the apparently similar pattern

小结:

(?!)只前向判断匹配,如bar(?!foo),而(?!foo)bar没有意义

(?<!)只后向判断匹配,如(?<!foo)bar,而foo(?<!bar)没有意义

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有