【问题标题】:Regular Expression to catch a sequence of letter and digit but containing minimum 3 letters ? how to do?正则表达式捕获一系列字母和数字,但至少包含 3 个字母?怎么做?
【发布时间】:2015-03-16 22:30:59
【问题描述】:

我必须在 PHP 中使用正则表达式来捕获文本中仅包含大写字母、数字或下划线的字符串。 示例:THIS_STUFFTHIS_2_STUFFONE_MORE_STUFF_2_CATCH 等...
它适用于:/[A-Z0-9_]/

但是,我想捕捉只有 :
的序列 - 最少 5 个字符 ==> /[A-Z0-9_]{5,}/
- AND 包含最少 3 个大写字母 ==> ????

你有什么想法吗?

谢谢!

【问题讨论】:

    标签: php regex


    【解决方案1】:

    AND 包含最少 3 个大写字母 ==> ????

    为此在开头使用positive lookahead assertion

    ^(?=(?:[^A-Z\n]*[A-Z]){3})[A-Z0-9_]{5,}$
    

    \b(?=(?:[^A-Z]*[A-Z]){3})[A-Z0-9_]{5,}+\b
    

    DEMO

    【讨论】:

    • 谢谢!我要试试看。
    • 请重新检查正则表达式。
    • 我重新检查,但这不是我需要的。如果您查看此处 (regex101.com/r/zE3iK5/1),您会发现您的正则表达式捕获了不应被捕获的字符串......无论如何,谢谢!
    • @DamFa 在否定字符类 regex101.com/r/zE3iK5/2 中添加一个换行符,因为你想匹配一个没有换行符的字符串,所以在否定类中 \n 是不必要的。这就是为什么我不会把它放在否定的 char 类中。而且TES_123 也是一个匹配项,因为它包含至少3 个大写字母和_,数字。总长度大于 5。满意。
    • Mhh...什么“换行符”可以改变这个问题?我不想捕捉像“123456”这样的字符串,而正则表达式无论如何都会捕捉到它?没有?
    猜你喜欢
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多