Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 传递给preg_match_的模式中的破折号/多拉都奇怪地使模式不匹配_Regex_Preg Match_Preg Match All - Fatal编程技术网

Regex 传递给preg_match_的模式中的破折号/多拉都奇怪地使模式不匹配

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”的文件中的所有行与其前面可能的空格进行匹配。示例文件为:

    #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]);