【问题标题】:Regular Expression Doesn't Work Properly With Turkish Characters正则表达式不适用于土耳其语字符
【发布时间】:2013-05-16 04:39:46
【问题描述】:

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

  • “ççç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üüüzzzeeelll”
  • "\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 从搜索到的推文中获取特定模式。

谢谢,

【问题讨论】:

  • 在您的正则表达式中没有问题,该站点中的引擎使用不同。做一件事,在该站点中选择 .net 选项,然后我们会得到您想要的正确结果。
  • 您在哪种情况下使用哪种编程语言?
  • @JukkaK.Korpela 我正在使用 PHP 编程语言通过 Twitter Rest Api 从搜索到的推文中获取特定模式。

标签: php regex nlp character turkish


【解决方案1】:

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

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

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

查看this table(向下滚动到字边界部分)以检查您的语言是否支持\b 的Unicode。如果它说,"ascii",那么它没有。

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

还有:utf-8 word boundary regex in javascript

进一步阅读:

【讨论】:

  • 我已经删除了 '"\b"' 操作数,它现在可以工作了。我没有使用 '"\s"' 和 '"\b"' 字符。谢谢。
猜你喜欢
  • 2014-02-26
  • 2018-04-18
  • 2019-08-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多