我是一个完整的正则表达式菜鸟,但我有一个问题需要弄清楚。
我有一个包含以下内容的文本文件......
String 1
Some variable
String 2
我看了一眼,并认为我是一个赢家,但我得到一个错误
preg_match( '/(String 1)(?:[^])*(String 2)/', $string, $matches );
但我收到此错误
preg_match():编译失败:缺少终止]对于偏移量为33的字符类
有人能帮我解决一下吗?
由于
答案 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);
^
- 匹配行/字符串的开头(..)
- 我们的捕获小组$
- 匹配行/字符串的结尾