3

我写了一个应该提取以下模式的正则表达式;

  • “çççoookkk gggüüüzzzeeelll”(意思是 vvveeerrryyy gggoooddd 带有土耳其语字符“ç”和“ü”)
  • “ccccoookkk ggguuuzzzeeellll”(意思相同,但带有英文字符“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üüüzzzeeellll”不起作用时
  • "\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 从搜索到的推文中获取特定模式。

谢谢,

4

1 回答 1

4

您尚未指定您使用的编程语言,但在其中许多语言中,\b字符类只能与纯 ASCII 编码一起使用。

在内部,被处理为和集合\b之间的边界。 反过来,等于。\w\W
\w[a-zA-Z0-9_]

如果您没有使用任何花哨的空格标记(您不应该),那么请考虑使用常规的空白字符类 ( \s)。

请参阅此表(向下滚动到单词边界部分)以检查您的语言是否支持\b. 如果它说"ascii",那么它没有。

附带说明一下,根据您的编程语言,您可以考虑使用直接 Unicode 代码点而不是国家字符。

还请参见:javascript 中的 utf-8 字边界正则表达式

进一步阅读:

于 2013-05-16T08:47:09.423 回答