我有以下表现:做一个负向前查找不区分大小写
$exp = "/^(?!.*?that).*$/";
这是为了匹配不包含“”任何线。
我有以下三个句子:
$str = array(
"I like this sentence.", #line1
"I like that sentence.", #line2
"I link THAT sentence." #line3
);
匹配是大小写敏感的,因此仅线1和3是匹配的。到现在为止还挺好。
不过,我想,使其不区分大小写的,所以它仅匹配线1.我有一个内嵌修改,即“(-i ...?)”的尝试:
$exp = "/^(?!.*?(?i:that)).*$/";
,并作为一个标志,即 “/ ...... /我”:
$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
我会感谢任何提示我如何使我的正则表达式不区分大小写。
编辑:我错误地使用“?-i”而不是“?-i”,正如一些贡献者正确指出的那样。现在修复。
'$ exp =“/^(?!.*?that)。* $/i”;'是正确的,应该工作。但是'(?-i:...'关掉了我的修饰符。要打开它:'(?i:...' –
第二次尝试使用'$ exp =“/^(?!.*?that )。* $/i“;'[**应该工作。**](https://3v4l.org/sEXhn) – revo
的确,看起来这个问题使搜索区分大小写而不管我的修饰符是在什么地方否则:u标志对于带有口音和其他字母的语言也是必需的,即''/^(?!.*?that)。* $/ui“'感谢您的快速回答! – msoutopico