我想要一个正则表达式来匹配所有不匹配的希腊语(utf-8)单词:
- 以
.
- 以
-
- 以
'
- 以数字结尾 (1-9)
- 从...开始
.
- 从...开始
,
- 从...开始
-
- 第一个字母是大写
- 所有字母都是大写的
这可能吗?为了匹配希腊词,我使用\p{Greek}{3,}
匹配至少 3 个字符的希腊 UTF-8 词。
我用 ruby 编写程序,但如果可以用 perl 或任何其他 cli 工具/语言完成,我将编写一个脚本来将输出转储到文本文件中。
(?<!\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)
- 单词后面不能有非空白字符。这确保我们不会在一个单词中间结束我们的匹配。