用于验证前面两个短划线(连字符)的数字的正则表达式

时间:2013-08-27 13:27:17

标签: php regex preg-replace preg-match

我坚持使用regexp来验证1-10之前可能有两个破折号(连字符)的数字,例如:

--9

--10

--1

但不是

--11 or not --0

我似乎对我来说似乎一切,例如:

/(-\-\[1-10])/

有什么问题?

编辑1:

非常感谢这么多工作实例!!

如果我还希望在所有这些之前验证数字,例如:

8--10 but not 0--10 or not 11--11

我尝试了这个,但它不起作用:

/--([1-9]|10:[1-9]|10)\b/

编辑2:

哦,这个最终有效:

/^(10|[1-9])--(10|[1-9])$/

5 个答案:

答案 0 :(得分:3)

尝试使用:

/\b(?:[1-9]|10)--(?:[1-9]|10)\b/

根据OP的编辑进行更改。

<强>解释

The regular expression:

(?-imsx:\b(?:[1-9]|10)--(?:[1-9]|10)\b)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    [1-9]                    any character of: '1' to '9'
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    10                       '10'
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
  --                       '--'
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    [1-9]                    any character of: '1' to '9'
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    10                       '10'
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

答案 1 :(得分:2)

我想这适合

/\-\-([1-9]|10)\b/

如果您不想捕获号码,请添加?:

/\-\-(?:[1-9]|10)\b/

答案 2 :(得分:2)

正确的正则表达式是

/\b--([1-9]|10)\b/

您错误地将字符类的第一个[转义为\[。使用的字符类也不正确。它将被视为一个角色类,成员110[10],这意味着它与01匹配

此外,连字符-不需要在字符类[]之外转义。要验证连字符之前的数字,请使用

/\b([1-9]|10)--([1-9]|10)\b/

答案 3 :(得分:2)

在角色类之外,您不需要转义连字符。此外,您的角色类[1-10]只会与10匹配,因为[1-10]等于[10]且只会匹配10。试试这个正则表达式:

/^--(10|[1-9])$/

答案 4 :(得分:1)

当你写[1-10]时,它表示字符1到1 + 0字符。好像你写了[0-1]。

事实上,在您的情况下,最好分别测试案例--1到-9和案例-10,例如:/^(--10)|(--[1-9])$/

您可以在http://myregexp.com/

上测试正则表达式