nEA*_*nam 9 php regex anchor pcre preg-match
为什么这两个正则表达式都成功匹配?
if(preg_match_all('/$^/m',"",$array))
echo "Match";
if(preg_match_all('/$^\n$/m',"\n",$array))
echo "Match";
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 11
$并且^是零宽度元字符.与其他.一次匹配一个字符的元字符(除非与量词一起使用)不同,它们实际上并不匹配文字字符.这就是^$匹配空字符串的原因"",即使正则表达式(sans delimiters)包含两个字符,而空字符串包含零.
空字符串不包含任何字符并不重要.它仍然有一个起点和一个终点,因为它是一个空字符串,它们都在同一个位置.因此,无论顺序或数量^和$使用,所有的排列应与空字符串.
你的第二个案例有点棘手,但适用相同的原则.
该m修饰符(PCRE_MULTILINE)只是告诉PCRE引擎到整个字符串中一气呵成喂,无论换行,但字符串也包括"多行".然后,它着眼于^和$为"行的开始"和"行结束"分别.
字符串"\n"基本上是逻辑上分为三个部分:"","\n"和""(因为换行符被空虚包围......听起来很诗意).
然后这些匹配如下:
第一个空字符串与起始字符匹配$^(如上所述).
在\n由同一匹配\n您的正则表达式.
第二个空字符串与最后一个匹配$.
这就是你的第二个案例导致匹配的方式.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |