preg_match给出编译失败错误


preg_match gives compilation failed error

我是一个完全的正则表达式noob,但我有一个问题需要解决。

我有一个包含以下内容的文本文件。。。

String 1
Some variable
String 2

我看了一眼,以为我是赢家,但我得到了一个错误

preg_match( '/(String 1)(?:[^])*(String 2)/', $string, $matches );

但是我收到这个错误

preg_match():编译失败:在偏移量33 处缺少字符类的终止]

有人能帮我弄清楚吗?

感谢

我相信您认为(?:[^])*匹配任何字符"零次或多次"。

在Javascript中,[^]表示与任何字符匹配的有效字符类。这与PCRE的工作方式不同,它编译为一个不完整的字符类。请将点.s(dotall)修饰符组合使用。

preg_match('/(String 1).*?(String 2)/s', $string, $matches);

也许可以简化它,使它变得公正;

/^(String 1|String 2)$/m

例如;

<?php
$s = <<<STR
String 1
Some variable
String 2
STR;
$output_array = array();
preg_match("/^(String 1|String 2)$/m", $s, $output_array);
echo print_r($output_array, true);

实时预览

  • ^-匹配行/字符串的开头
  • (..)-我们的捕获组
  • $-匹配行/字符串的末尾