关于php正则表达式的两点备注_PHP教程
程序员文章站
2022-05-25 16:44:39
...
severaltipsaboutRegularExpressions
1.processfor"greedy"
Bydefault,thequantifiersare"greedy",thatis,they
matchasmuchaspossible(uptothemaximumnumberofper-
mittedtimes),withoutcausingtherestofthepatternto
fail.Theclassicexampleofwherethisgivesproblemsisin
tryingtomatchcommentsinCprograms.Theseappearbetween
thesequences/*and*/andwithinthesequence,individual
*and/charactersmayappear.AnattempttomatchCcom-
mentsbyapplyingthepattern
/*.**/
tothestring
/*firstcommand*/notcomment/*secondcomment*/
fails,becauseitmatchestheentirestringduetothe
greedinessofthe.*item.
However,ifaquantifierisfollowedbyaquestionmark,
thenitceasestobegreedy,andinsteadmatchestheminimum
numberoftimespossible,sothepattern
/*.*?*/
小结:
?与/U有类似功能,但同时出现彼此抵消
如下:
$a="asdf/*asdfaldsfasdf*/asfdasldf;kfldsj*/asfddsaf";
$pattern="//*.*?*//";
//$pattern="//*.**//U";
//$pattern="//*.*?*//U";
preg_match($pattern,$a,$match);
print_r($match);
?>
2.Assertions
w+(?=;)
matchesawordfollowedbyasemicolon,butdoesnotinclude
thesemicoloninthematch,and
foo(?!bar)
matchesanyoccurrenceof"foo"thatisnotfollowedby
"bar".Notethattheapparentlysimilarpattern
小结:
(?!)只前向判断匹配,如bar(?!foo),而(?!foo)bar没有意义
(?
1.processfor"greedy"
Bydefault,thequantifiersare"greedy",thatis,they
matchasmuchaspossible(uptothemaximumnumberofper-
mittedtimes),withoutcausingtherestofthepatternto
fail.Theclassicexampleofwherethisgivesproblemsisin
tryingtomatchcommentsinCprograms.Theseappearbetween
thesequences/*and*/andwithinthesequence,individual
*and/charactersmayappear.AnattempttomatchCcom-
mentsbyapplyingthepattern
/*.**/
tothestring
/*firstcommand*/notcomment/*secondcomment*/
fails,becauseitmatchestheentirestringduetothe
greedinessofthe.*item.
However,ifaquantifierisfollowedbyaquestionmark,
thenitceasestobegreedy,andinsteadmatchestheminimum
numberoftimespossible,sothepattern
/*.*?*/
小结:
?与/U有类似功能,但同时出现彼此抵消
如下:
$a="asdf/*asdfaldsfasdf*/asfdasldf;kfldsj*/asfddsaf";
$pattern="//*.*?*//";
//$pattern="//*.**//U";
//$pattern="//*.*?*//U";
preg_match($pattern,$a,$match);
print_r($match);
?>
2.Assertions
w+(?=;)
matchesawordfollowedbyasemicolon,butdoesnotinclude
thesemicoloninthematch,and
foo(?!bar)
matchesanyoccurrenceof"foo"thatisnotfollowedby
"bar".Notethattheapparentlysimilarpattern
小结:
(?!)只前向判断匹配,如bar(?!foo),而(?!foo)bar没有意义
(?
推荐阅读
-
关于js与php互相传值的介绍_PHP教程
-
关于PHP session 存储方式的详细介绍_PHP教程
-
PHP正则表达式替换站点关键字链接后空白的问题解决,正则表达式关键字_PHP教程
-
wxzh001,进来看关于APACHE+PHP+MYSQL+SSL的LINUX下安装配置(转自奥索)_PHP教程
-
关于PHP 7你必须知道的五件事,php五件事_PHP教程
-
关于APACHE的配置文件httpd.conf[转](一)_PHP教程
-
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总_PHP教程
-
php中关于抽象(abstract)类和抽象方法的问题分析_PHP教程
-
Yii 关于 find findAll 查找出制定的字段的方法,yiifindall_PHP教程
-
关于PHP中for循环语句的几种变型_PHP教程