我编写了一个应该提取以下模式的正则表达式;
- “ççççoookkk gggüüüüzzzeeelll”(意思是 vvveeerrryyy gggoooddd 带有土耳其语字符“ç”和“ü”)
- "ccccoookkk ggguuuzzzeeelll"(意思相同,但有英文字符“c”和“u”)
这是我正在尝试的正则表达式;
"\b[çc]+o+k+\sg+[üu]+z+e+l+\b"
:这适用于英语,但不适用于土耳其语字符“çok”
:找到“çok”,但当我尝试“ç+o+k+”
对“çççoookkk”不起作用时,它找到“çoookkk”“güzel”
:找到“güzel”,但当我尝试“g+ü+z+e+l+”
时,它对“gggüüüuzzzeeelll”不起作用<"\b(c+o+k+)|(ç+o+k+)\s(g+u+z+e+l)|(g+ü+z+e+l+)\b"
: 不能正常工作[çc]ok\sg[uü]zel"
:我也试过这个来获得“çok güzel”模式,但都不起作用。
我认为问题可能在于使用带有土耳其字符的正则表达式运算符。我不知道我该如何解决这个问题。
我正在使用 http://www.myregextester.com检查我的正则表达式是否正确。
我正在使用 Php 编程语言通过 Twitter Rest Api 从搜索的推文中获取特定模式。
谢谢,
最佳答案
您没有指定您使用的是哪种编程语言,但在其中的许多语言中,\b
字符类只能用于纯 ASCII 编码。
在内部,\b
被处理为 \w
和 \W
集之间的边界。
反过来,\w
等于 [a-zA-Z0-9_]
。
如果您没有使用任何花哨的空格标记(您不应该),请考虑使用常规的空白字符类 (\s
)。
参见 this table (向下滚动到 Word Boundaries 部分)检查您的语言是否支持 \b
的 Unicode。如果它说,“ascii”,那么它就不是。
附带说明,根据您的编程语言,您可以考虑使用直接 Unicode 代码点而不是国家字符。
还可以:utf-8 word boundary regex in javascript
进一步阅读:
关于php - 正则表达式不能正确处理土耳其字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579113/