使否定先行不区分大小写
Make a negative lookahead case-insensitive
我有以下表达式:
$exp = "/^(?!.*?that).*$/";
这意味着匹配任何不包含 "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)).*$/";
并作为标志,即“/ ... /i”:
$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”。现已修复。
您的第一个正则表达式 ^(?!.*?that).*$
与区分大小写无关,因为您没有使用任何修饰符来区分大小写。
正则表达式匹配第一句和第三句,因为你的正则表达式表示不应该是一个词that
(此处区分大小写) 在句子中,这对于第一句和第三句是正确的(在第三句中你有 THAT 与 that 不同)
只匹配首句,可以使用内联修饰符(?i)
like
(?i)^(?!.*?that).*$
见here
顺便说一句,您的 /^(?!.*?that).*$/i
正则表达式也是正确的。
你很接近:
^(?!.*?(?i)that).*$
参见a demo on regex101.com。在您的表达式 ((?-i)
) 中,您正在关闭修饰符 .
我有以下表达式:
$exp = "/^(?!.*?that).*$/";
这意味着匹配任何不包含 "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)).*$/";
并作为标志,即“/ ... /i”:
$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”。现已修复。
您的第一个正则表达式 ^(?!.*?that).*$
与区分大小写无关,因为您没有使用任何修饰符来区分大小写。
正则表达式匹配第一句和第三句,因为你的正则表达式表示不应该是一个词that
(此处区分大小写) 在句子中,这对于第一句和第三句是正确的(在第三句中你有 THAT 与 that 不同)
只匹配首句,可以使用内联修饰符(?i)
like
(?i)^(?!.*?that).*$
见here
顺便说一句,您的 /^(?!.*?that).*$/i
正则表达式也是正确的。
你很接近:
^(?!.*?(?i)that).*$
参见a demo on regex101.com。在您的表达式 ((?-i)
) 中,您正在关闭修饰符 .