php - 正则表达式不能正确处理土耳其字符

标签 php regex nlp character turkish

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

  • “çççç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/

相关文章:

java - 我正在尝试从文本中提取语义信息

javascript - document.getElementById 不适用于 jquery 加载

php - 新行 (\n) 在 xampp 中有效吗?

php - PDO fatal error : Call to a member function prepare() on a non-object (using classes)

regex - 包含不以特定字符开头的序列的字符串的正则表达式

java - 从apache nifi中的嵌套json中提取值

java - 字符串获取行尾的文本

nlp - 如何在sklearn中重用pickled管道中的分类器?

php - 在系统上的所有文件中查找一个字符串

java - 有什么算法可以根据疑问词对问题类型进行分类吗?