如果一个字符串包含另一个字符串作为单个单词,我如何进行不区分大小写的测试? 针周围不允许有任何其他字母 [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
答案 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
}