我有以下表达式:
$exp = "/^(?!.*?that).*$/";
用于匹配任何不包含""。
的行我有以下三句话:
$str = array(
"I like this sentence.", #line1
"I like that sentence.", #line2
"I link THAT sentence." #line3
);
匹配区分大小写,因此只匹配第1行和第3行。到目前为止一切都很好。
但是,我想让它不区分大小写,所以它只匹配第1行。我尝试使用内联修饰符,即&#34;(? - i ...)&#34;:< / p>
$exp = "/^(?!.*?(?i:that)).*$/";
并作为旗帜,即&#34; / ... / i&#34;:
$exp = "/^(?!.*?that).*$/i";
但无济于事。
我使用以下循环运行搜索:
foreach($str as $s) {
preg_match_all($exp, $s, $matches);
var_dump($matches);
}
带输出:
array (size=1)
0 =>
array (size=1)
0 => string 'I like this sentence.' (length=21)
array (size=1)
0 =>
array (size=0)
empty
array (size=1)
0 =>
array (size=1)
0 => string 'I link THAT sentence.' (length=21)
此处提供在线演示:https://regex101.com/r/bs9rzF/1
我很感激有关如何使我的正则表达式不区分大小写的提示。
编辑:我错误地使用&#34;? - 我&#34;而不是&#34;? - i&#34;,正如一些贡献者正确指出的那样。现在修好了。
答案 0 :(得分:2)
您的第一个正则表达式^(?!.*?that).*$
与区分大小写无关,因为您没有使用任何修饰符来区分大小写。
正则表达式匹配第一句和第三句,因为你的正则表达式是说不应该成为单词that
(区分大小写)句子,对于第一句和第三句都是正确的(在第三句中你有那个,这与 不一样)
要仅匹配第一个句子,您可以使用内联修饰符(?i)
,如
(?i)^(?!.*?that).*$
参见 here
/^(?!.*?that).*$/i
正则表达式也是正确的。
答案 1 :(得分:2)