【问题标题】:Reusing a character class in a regular expression在正则表达式中重用字符类
【发布时间】:2013-12-05 05:47:45
【问题描述】:

为了使正则表达式更简短,是否有一种简写方式来引用同一正则表达式中较早出现的字符类?

示例

有没有办法缩短以下内容:

[acegikmoqstz@#&].*[acegikmoqstz@#&].*[acegikmoqstz@#&]

【问题讨论】:

  • 嗯...您使用的是什么编程语言?
  • 使用变量动态创建正则表达式可能是您最好的选择。例如,在 Python 中,您可以使用 cc = r'[acegikmoqstz@#&]'; regex = r'{0}.*{0}.*{0}'.format(cc).
  • 在大多数编程语言中,没有;但是在正则表达式是字符串的语言中,您可以通过使用先前定义的字符串构建正则表达式来获得相同的效果。
  • 啊,就像@F.J 只是说的:-)
  • @NoBrainer Java,但我也很想知道这是否只能使用正则表达式来完成

标签: regex hardcoded character-class


【解决方案1】:

请记住,正则表达式功能取决于所使用的语言。

使用 Java,您可以这样做:

[acegikmoqstz@#&](?:.*[acegikmoqstz@#&]){2}

但仅此而已,使用 java 你不能引用命名的子模式。

使用 PHP,您可以做到这一点:

(?(DEFINE)(?<a>[acegikmoqstz@#&]))\g<a>(?:.*\g<a>){2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多