0

我想要一个正则表达式来匹配所有不匹配的希腊语(utf-8)单词:

  • .
  • -
  • '
  • 以数字结尾 (1-9)
  • 从...开始.
  • 从...开始,
  • 从...开始-
  • 第一个字母是大写
  • 所有字母都是大写的

这可能吗?为了匹配希腊词,我使用\p{Greek}{3,}匹配至少 3 个字符的希腊 UTF-8 词。

我用 ruby​​ 编写程序,但如果可以用 perl 或任何其他 cli 工具/语言完成,我将编写一个脚本来将输出转储到文本文件中。

4

1 回答 1

3
(?<!\S)(?=\S*\p{Greek})(?![-,.\p{Lu}])(?![\p{Lu}\P{L}]+\b)\S+(?<![-.'1-9])(?!\S)

让我们分解一下这个野兽:

  • 正则表达式的核心是\S+中间,被一堆正负断言包围。
  • (?<!\S)- 单词前面不能有非空白字符。这确保我们不会在单词中间开始匹配。
  • (?=\S*\p{Greek})- 某处必须至少有一个希腊字母。
  • (?![-,.\p{Lu}])- 单词不能以破折号、逗号、点或大写字母开头\p{Lu}
  • (?![\p{Lu}\P{L}]+\b)- 单词不得全部为大写字母和符号。
  • (?<![-.'1-9])- 单词不得以破折号、圆点、撇号或数字 1 到 9 结尾。
  • (?!\S)- 单词后面不能有非空白字符。这确保我们不会在一个单词中间结束我们的匹配。
于 2012-12-15T09:16:27.717 回答