【问题标题】:complicate regexp matching words (is it possible?)复杂的正则表达式匹配词(有可能吗?)
【发布时间】:2012-12-15 08:45:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: regex utf-8


    【解决方案1】:
    (?<!\S)(?=\S*\p{Greek})(?![-,.\p{Lu}])(?![\p{Lu}\P{L}]+\b)\S+(?<![-.'1-9])(?!\S)
    

    让我们打破这个野兽:

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

    【讨论】:

    • 这是一个起点,但对我不起作用:d.pr/i/zbCN 但是它可以是一个起点。
    • @atmosx 哪些词不正确(不)匹配?你能把它们贴在这里让我测试吗?
    • 我有this text。在rubular 上使用您的正则表达式我匹配以下不需要的单词:[ΕΤΥΜ - 它有一个[ 和它的大写,&lt; 不是一个词,avantare 它是英语而不是希腊语,(η)(),等等。
    • 已修复,因此它与 [ETYM&lt; 不匹配。添加了至少一个希腊字母的检查。
    • 与您的代码无关,但似乎 Ruby 的拉丁脚本实现存在错误 - 大写英文字母字符不匹配。
    猜你喜欢
    • 2016-08-11
    • 2013-01-04
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多