Php 为什么\b对某些语言不能正常工作?
这是我的代码:(它适用于英语)Php 为什么\b对某些语言不能正常工作?,php,regex,word-boundary,Php,Regex,Word Boundary,这是我的代码:(它适用于英语) 但是我不知道为什么,上面的正则表达式对于波斯语来说并不正确:(它总是返回1) 如何修复它?如果您已将正则表达式放入“/[\b(?:1583;یوا㶈㶈)\b]/u”中的字符类中,请从中删除[]: "/\b(?:دیوار|خوب)\b/u" 您可以将\b替换为其他选项: "/(?:^|\s)(?:دیوار|خوب)(?:\s|$)/u" 您还可以使用列出阿拉伯字母的否定字符类更改\s。我不认识他们,但这就像:[^1583]。。字符类或双引号正则表达式中的\
但是我不知道为什么,上面的正则表达式对于波斯语来说并不正确:(它总是返回
1
)
如何修复它?如果您已将正则表达式放入
“/[\b(?:1583;یوا㶈㶈)\b]/u”中的字符类中,请从中删除[]
:
"/\b(?:دیوار|خوب)\b/u"
您可以将\b
替换为其他选项:
"/(?:^|\s)(?:دیوار|خوب)(?:\s|$)/u"
您还可以使用列出阿拉伯字母的否定字符类更改\s
。我不认识他们,但这就像:[^1583]。
。字符类或双引号正则表达式中的\b
是一个退格字符
这就是为什么正确答案是:要么使用单引号正则表达式声明,以免使用双转义,要么在双引号正则表达式中的b
之前使用双反斜杠
“/\b(?:دیا㶈みوب)\b/u'
或
“/\\b(?:دیواみوب)\\b/u”
见此:
您仍然需要为您的问题添加适当的描述。@DanielCheung我需要检查带有一些关键字的字符串。如果字符串中至少存在一个关键字,则返回1
,否则返回2
。也许这个答案可以帮助您:@swidmann我已经看到了您以前链接我的内容。它不能正常工作。我测试了它。仍然不起作用,你的解决方案总是返回2
@Sajad:真奇怪,在这里,它起作用了,它为$str1
提供1
,为$str2
提供2
。哦,真的吗?!你有不同的结果?!是的,很奇怪。只有一件事,这里面的?:
(?:code>)?如果我删除它会发生什么?@Sajad:它是一个非捕获组,如果你不需要捕获值,它比捕获组更有效。对不起,我不太懂英语,我想知道“变通”与“解决方案”是一样的?“变通”指的是一个临时解决方案,它不能100%按预期工作或工作速度较慢,因为真正的解决方案不可能或太难/太耗时而无法创建。试着在逗号内加上单词,托托的解决方案就行不通了。
"/\b(?:دیوار|خوب)\b/u"
"/(?:^|\s)(?:دیوار|خوب)(?:\s|$)/u"
echo preg_match('/\b(?:دیوار|خوب)\b/u', $str1) ? 1 : 2; // output: 1
echo preg_match('/\b(?:دیوار|خوب)\b/u', $str2) ? 1 : 2; // output: 1 (it should be 2)