复杂的正则表达式匹配单词(可能吗?)

时间:2012-12-15 08:45:45

标签: regex utf-8

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

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

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

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

1 个答案:

答案 0 :(得分: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) - 单词后面不能包含非空格字符。这确保我们不会在一个单词中间结束我们的匹配。