使否定的前瞻不区分大小写 - php

我有以下表达:

$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正则表达式也是正确的。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用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…