我有以下表达:
$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而不是一样)
要仅匹配第一句,可以使用内联修饰符(?i)
(?i)^(?!.*?that).*$
见here
顺便说一句,您的/^(?!.*?that).*$/i
正则表达式也是正确的。
我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
PHP getallheaders替代 - php我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…
PHP Count数组元素 - php嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…
PHP:从函数返回值并直接回显它? - php这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…
PHP mysqli获取查询返回的第一行的值 - php我正在使用mysqli从数据库中获取某些数据。我正在使用的查询已设置为仅从数据库返回一行。有没有一种方法可以在不使用while循环的情况下获取该行的值?我知道一个while循环对于返回多于一行的行很有用,但是如果不需要while循环,我想避免这种情况,因为不必要的代码是不好的编程。 参考方案 是的-您可以使用:$row = $result->fetch…