测试字符串是否包含另一个字符串作为单个单词

时间:2021-06-03 09:19:32

标签: php regex

如果一个字符串包含另一个字符串作为单个单词,我如何进行不区分大小写的测试? 针周围不允许有任何其他字母 [a-z]。

这里有几个例子:

$needle = 'Test';

$haystack1 = 'This is a_test'; // true
$haystack2 = 'This is a test'; // true
$haystack3 = 'Test this is'; // true
$haystack4 = 'Another Test as example'; // true
$haystack5 = 'This is atest'; // false

2 个答案:

答案 0 :(得分:2)

我有 this 正则表达式 /(?<=[^a-z]|^)text(?=[^a-z]|$)/i

它的意思是:检查没有[a-z]或文本开始之前的文本,以及没有[a-z]或文本结束之后的文本。 /i 表示不合情理。

注意'text'后面有数字时匹配,如果要排除数字匹配,discartion组就变成[^a-z^\d]\d表示数字)。

编辑:通过更多的研究,我发现有更好的方法来做到这一点。它被称为单词边界,包括在单词前后添加 \b:/\btext\b/i

答案 1 :(得分:1)

感谢@Pakoco,我找到了解决方案:

if (preg_match('/^(?i)(?=.*?\b' . $needle . '\b).*/', $haystack) === 1) {
    // do stuff
}

为了完成这里的正则表达式,如果针必须在开头:

if (preg_match('/^(?i)(' . $needle . '\b).*/', $haystack) === 1) {
    // do stuff
}

如果针必须在末端:

if (preg_match('/(?i)(\b' . $needle . ')$/', $haystack) === 1) {
    // do stuff
}