【问题标题】:Single regex - match only exactly defined names单个正则表达式 - 仅匹配完全定义的名称
【发布时间】:2016-09-12 12:24:03
【问题描述】:

有一个巨大的全名列表,我只需要过滤那些名字长于 3 个字母字符且姓氏长于 7 个字母字符的名称。全名应仅包含 1 个名字和 1 个姓氏,由一个空格分隔。名字和姓氏中都不允许使用特殊字符。全名的总长度不得超过 26 个字符。

我不知道如何组合条件,就好像我把量词放在括号后面一样,它不会比较全名的长度,而是比较正则表达式匹配输入文本的次数。

(([A-Za-z]{3,} [A-Za-z]{7,}){26}

这肯定可以通过多个正则表达式来完成。困难的部分是创建一个必须的正则表达式。

【问题讨论】:

    标签: regex multiple-conditions


    【解决方案1】:

    您可以使用前瞻:

    (?=^.{1,26}$)([A-Za-z]{3,} [A-Za-z]{7,})
    

    第一部分会断言长度是从0到26,第二部分是匹配名字的规则。

    【讨论】:

    • 您使用什么regex 引擎?显然{,26} 不是PerlPHP 中的有效量词。 Perl 文档建议该语法将来可能会变得有效。但是,我会将{1,26} 放在那里以使regex 有效且可移植。或{11,26} 以更好地匹配组件的最小长度和它们之间的空白。
    【解决方案2】:

    试试这个正则表达式:

    (?=^[a-z]{3,}\s[a-z]{7,}$)(.*){1,27} //global,case-insensitive
    

    它使用零长度的前瞻断言来满足 逻辑 条件(3+ 第一,一个空格,7+ 最后,只有字母),以及一个量化的“任何东西”到 消耗适当数量的字符。

    regex demo here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多