preg_match给出编译失败错误

时间:2014-09-22 12:13:17

标签: php regex preg-match

我是一个完整的正则表达式菜鸟,但我有一个问题需要弄清楚。

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

String 1
Some variable
String 2

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

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

但我收到此错误

  

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

有人能帮我解决一下吗?

由于

2 个答案:

答案 0 :(得分:0)

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

在Javascript中,[^]表示匹配任何字符的有效字符类。对于PCRE,这不起作用,它编译为不完整的字符类。使用点.代替s(dotall)修饰符。

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

答案 1 :(得分:0)

也许简化它并使它成为公正;

/^(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);

Live Preview

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