Regex 传递给preg_match_的模式中的破折号/多拉都奇怪地使模式不匹配
我的正则表达式有问题。我正在尝试将包含单词“RewriteBase”的文件中的所有行与其前面可能的空格进行匹配。示例文件为:Regex 传递给preg_match_的模式中的破折号/多拉都奇怪地使模式不匹配,regex,preg-match,preg-match-all,Regex,Preg Match,Preg Match All,我的正则表达式有问题。我正在尝试将包含单词“RewriteBase”的文件中的所有行与其前面可能的空格进行匹配。示例文件为: #RewriteBase /yardley/development RewriteBase /yardley/ 我的模式及其结果: @RewriteBase\s*(.*)@ //matches both lines - OK @RewriteBase\s*(.*)$@ //matches first line only - why? @^.*Rewrit
#RewriteBase /yardley/development
RewriteBase /yardley/
我的模式及其结果:
@RewriteBase\s*(.*)@ //matches both lines - OK
@RewriteBase\s*(.*)$@ //matches first line only - why?
@^.*RewriteBase\s*(.*)@ //doesn't match any - why? It should accept all characters before "RewriteBase"
我完全被它卡住了。非常感谢因为您使用的是测线起始锚点
^
或测线结束锚点$
,所以第2个正则表达式将只匹配第2行,第3个正则表达式将只匹配第1行
您可以使用多行(m)开关匹配3个正则表达式中的所有行:
$s = <<< EOF
#RewriteBase /yardley/development
RewriteBase /yardley/
EOF;
if (preg_match_all('@RewriteBase\s*(.*)$@m', $s, $arr))
var_dump($arr[0]);
由于您使用的是行起始锚点
^
或行结束锚点$
,因此第2个正则表达式将只匹配第2行,第3个正则表达式将只匹配第1行
您可以使用多行(m)开关匹配3个正则表达式中的所有行:
$s = <<< EOF
#RewriteBase /yardley/development
RewriteBase /yardley/
EOF;
if (preg_match_all('@RewriteBase\s*(.*)$@m', $s, $arr))
var_dump($arr[0]);