gpt4 book ai didi

php - preg_quote 忽略 preg_match_all 中的尾随点

转载 作者:搜寻专家 更新时间:2023-10-31 21:24:05 25 4
gpt4 key购买 nike

正则表达式

preg_match_all('@(\b' . preg_quote($needle,'@') . '\b)@is', $haystack, $matches);

干草堆

(工作:NAS-Inkrementell)操作成功。

操作成功 --> 有效

操作成功。 --> 不工作

我做了一些测试:

替代干草堆

(Job: NAS-Inkrementell) 操作成功。

替代针

操作成功 --> 有效

因此,针确实正确地转义了,正如我通过 dump(preg_quote($needle,'@')); 看到的那样 --> Operation succeeded\.

包含尾随点的正确方法是什么?

快速引用:http://www.phpliveregex.com/p/hzl

谢谢

编辑

我还需要在大海捞针My-NAS时区分My-NASMy-NAS-2,所以我还需要尾随 \b

EDIT2

ideone.com/Suzz2E我希望它是 1 1 0 1 而不是 1 1 1 1,因此如果大海捞针中只有 MyNAS-2,则不应找到 MyNAS

最佳答案

. 不是单词字符,\.\b 模式需要在. 之后有一个单词字符。您需要实现自定义字边界。

由于您需要匹配前面没有单词 char 或连字符并且后面没有单词 char 或连字符的字符串,您可以使用

preg_match_all('@(?<![\w-])' . preg_quote($needle1,'@') . '(?![\w-])@is', $haystack, $matches)

参见 regex demo .

参见 PHP demo :

$haystack1 = "(Job: NAS-Inkrementell) Operation succeeded. MyNAS-2 reports duty.";

$needle1 = "Operation succeeded";
echo preg_match_all('@(?<![\w-])' . preg_quote($needle1,'@') . '(?![\w-])@is', $haystack1, $matches1) ."\n";

$needle2 = "Operation succeeded.";
echo preg_match_all('@(?<![\w-])' . preg_quote($needle2,'@') . '(?![\w-])@is', $haystack1, $matches2) ."\n";

$needle3 = "MyNAS";
echo preg_match_all('@(?<![\w-])' . preg_quote($needle3,'@') . '(?![\w-])@is', $haystack1, $matches3) ."\n";

$needle4 = "MyNAS-2";
echo preg_match_all('@(?<![\w-])' . preg_quote($needle4,'@') . '(?![\w-])@is', $haystack1, $matches4) ."\n";

关于php - preg_quote 忽略 preg_match_all 中的尾随点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com