1

我的正则表达式有问题。我正在尝试将包含单词“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"

我完全坚持下去了。非常感谢

4

1 回答 1

1

由于您使用的是行开始锚^或行结束锚$,因此第二个正则表达式将仅匹配第二行,第三个正则表达式将仅匹配第一行。

您可以使用多行 (m) 开关来匹配 3 正则表达式中的所有行:

$s = <<< EOF
#RewriteBase /yardley/development
RewriteBase /yardley/
EOF;
if (preg_match_all('@RewriteBase\s*(.*)$@m', $s, $arr))
   var_dump($arr[0]);

输出:

array(2) {
  [0]=>
  string(32) "RewriteBase /yardley/development"
  [1]=>
  string(21) "RewriteBase /yardley/"
}
于 2013-10-16T20:22:41.740 回答