首页 文章

如何匹配整个表达式,即使存在匹配的子部分?

提问于
浏览
2

只是尝试编写允许输入野生字符的输入验证模式 . 输入字段最多为9个字符,应遵循以下规则:

* + 1- 8 charcters
 1- 8 chars + *
 * + 1-7 chars + *

我使用正则表达式文档编写了这个正则表达式,并在其中一个正则表达式测试器上进行了测试 .

\ * {1} [0-9] {1,7} \ * {1} | [0-9] {1,8} \ * {1} | \ * {1} [0-9] {1 ,8} | [0-9] {9}

它正确匹配所有这些

123456789
*1*
*12*
*123*
*1234*
*12345*
*123456*
*1234567*
1234567*
123456*
12345*
1234*
123*
12*
1*
*1
*12
*123
*1234
*12345
*123456
*1234567
*12345678

但是当我不想要它时它也匹配 . 例如,它在此_426126中找到2个匹配_第一个匹配是 *12345678 ,第二个匹配是 9*

我不希望在这种情况下找到任何匹配 . 整个字符串是否匹配其中一个模式 . 怎么做到这一点?

2 回答

  • 3

    您可以使用开始和结束字符串锚点:

    http://www.regular-expressions.info/anchors.html

    所以,你的正则表达式将是这样的(注意第一个和最后一个符号):

    ^(\*{1}[0-9]{1,7}*{1}|[0-9]{1,8}*{1}|*{1}[0-9]{1,8}|[0-9]{9})$
    
  • -1

    使用anchors确保正则表达式始终与整个字符串匹配:

    ^(\*[0-9]{1,7}\*|[0-9]{1,8}\*|\*[0-9]{1,8}|[0-9]{9})$
    

    请注意括号,以确保交替包含在组中:

    ^
    (
     \*[0-9]{1,7}\*
    |
     [0-9]{1,8}\*
    |
     \*[0-9]{1,8}
    |
     [0-9]{9}
    )
    $
    

    此外, {1} 总是多余的 - 每个标记一个匹配是默认值 .

相关问题