【问题标题】:Simple regex required需要简单的正则表达式
【发布时间】:2009-05-26 01:29:06
【问题描述】:

我从来没有在我的生活中使用过正则表达式,而且天哪,它看起来就像一个可以潜入的深水池。反正, 我需要这个模式的正则表达式(AN 是字母数字(a-z 或 0-9),N 是数字(0-9),A 是字母(a-z)):

AN,AN,AN,AN,AN,N,N,N,N,N,N,AN,AN,AN,A,A

这是 5 个 AN,接着是 6 个 N,接着是 3 个 AN,最后是 2 个 A。 如果有影响的话,我使用的语言是 Java。

【问题讨论】:

  • 如果您使用特定语言,则应使用该语言标记问题。
  • 没问题,下次就知道了

标签: java regex


【解决方案1】:
[a-z0-9]{5}[0-9]{6}[a-z0-9]{3}[a-z]{2}

应该在大多数 RE 方言中为您指定的任务工作——它们中的大多数还支持缩写,例如 \d(数字)代替 [0-9](但如果字母需要小写,因为你似乎在请求,您可能需要拼出 a-z 部分)。

【讨论】:

  • 我假设您的意思是 [0-9],而不是 [0--9]。为你修好了。
  • OP 在模式的开头要求 5 个字母数字,而不是 {6}.. 您可能应该更新它以确保正确性。这样的东西更接近 OP 的要求:[a-z0-9]{5}[0-9]{6}[a-z0-9]{3}[a-z]{2}
【解决方案2】:

将每个 AN 替换为 [a-z0-9],将每个 N 替换为 [0-9],将每个 A 替换为 [a-z]。

【讨论】:

  • 这是正确的 (+1),但正则表达式很糟糕 (-1)。 Alex Martelli 的正则表达式更具可读性。
  • 没错,他自己也有。
【解决方案3】:

Expresso 中的 30 秒:

[a-zA-Z0-9]{5}[0-9]{6}[a-zA-Z0-9]{3}[0-9]{2}

不区分大小写,但您可以用 Java 代替正则表达式来定义它。

【讨论】:

  • Expresso 很棒!我高度支持这个程序的建议,认为它是生成和测试正则表达式的好方法。
【解决方案4】:

对于您发布的示例,以下应该可以正常工作。

(([A-Za-z\d])*,){5}+(([\d])*,){6}+(([A-Za-z\d])*,){3}+([\d])*,[\d]*

在 Java 中你应该可以这样使用它:

boolean foundMatch = subjectString.matches("(([A-Za-z\\d])*,){5}+(([\\d])*,){6}+(([A-Za-z\\d])*,){3}+([\\d])*,[\\d]*");

我使用了这个工具来帮助学习 RegEx,它也让这变得非常容易。 http://www.regexbuddy.com/

【讨论】:

    【解决方案5】:

    尝试查看一些简单的 java 正则表达式教程,例如 this

    他们会告诉你如何形成正则表达式以及如何在 java 中使用它。

    【讨论】:

      【解决方案6】:

      这应该与您请求的模式相匹配。

      [a-z0-9]{5}[0-9]{6}[a-z0-9]{3}[a-z]{2}
      

      此外,您可以添加字符串开头/字符串结尾匹配,如果您的字符串匹配失败(如果其中有任何其他字符):

      ^[a-z0-9]{5}[0-9]{6}[a-z0-9]{3}[a-z]{2}$
      

      【讨论】:

        猜你喜欢
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多