【问题标题】:Matching alphanumeric words in a string which are greater than two characters in length匹配字符串中长度大于两个字符的字母数字单词
【发布时间】:2022-12-10 07:46:09
【问题描述】:

我有以下正则表达式:

/^(.*[^0-9])(.[a-z]+[0-9]+[a-z0-9]*|[0-9]+[a-z]+[a-z0-9]*{3,})(.*)$/gm

我想匹配 URL 中长度超过两个字符的字母数字组。所以基本上:

在 URL 中:/version/a1/type/eg1234/abceg1234 应该匹配,因为它是字母数字且长度大于两个。

然而,虽然我的字母数字匹配逻辑似乎工作正常,但不满足长度条件,即 {3,},例如/version/a1/type/,正则表达式也匹配a1,它不应该匹配,因为它的长度少于两个字符。

如何更正我的正则表达式?

【问题讨论】:

    标签: regex


    【解决方案1】:

    尝试:

    (?=d+[a-z][a-zd]*|[a-zd]*[a-z]d)[a-zd]{3,}
    

    Regex demo.

    这将仅匹配 /version/a1/type/eg1234/abc 中的 eg1234

    【讨论】:

    • Kessely 它在隔离中工作正常,但如果作为一个组放入,即 /^(.*[^0-9])((?=d+[a-z][a-zd]*|[a-zd]*[a-z]d)[a-zd]{3,})(.*)$/gm,它会跳过字符串的第一个字符,因为它只匹配/version/a1/type/eg1234/abc中的g1234而不是eg1234
    • 尝试使用 (?=d+[a-z][a-zd]*|.[a-zd]*[a-z]d)[a-zd]{3,} 对其进行一些自定义,这解决了上述问题,但不确定它是否是正确的解决方案。
    • @Maven 你可能是说^(.*?)((?=d+[a-z][a-zd]*|[a-zd]*[a-z]d)[a-zd]{3,})(.*)$regex101.com/r/eES09x/1
    【解决方案2】:

    尝试:

    /(?=[a-zA-Z0-9]{4,})(?=(?:[^/d]*d){4,})([^/]{3,})/
    

    Demo

    【讨论】:

    • 使用 /version/a1/type/1eg/abc 将不会匹配任何内容。
    猜你喜欢
    • 2017-10-09
    • 2011-09-15
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多