需要帮助了解preg_match正则表达式

时间:2012-09-11 12:13:04

标签: php regex

preg_match中的正则表达式为/server\-([^\-\.\d]+)(\d+)/。有人能帮我理解这意味着什么吗?我看到字符串以server-开头,但我没有得到([^\-\.\d]+)(\d+)'

4 个答案:

答案 0 :(得分:2)

[ ] - >将方括号内的任何内容与一个字符位置匹配一次,仅匹配一次,例如,[12]表示将目标与1匹配,如果不匹配,则将目标与2匹配,而[0123456789]表示匹配目标中的任何字符范围0到9。

- - >方括号内的 - (破折号)是'范围分隔符'并允许我们定义范围,在上面的[0123456789]示例中,我们可以将其重写为[0-9]。

您可以在列表中定义多个范围,例如,[0-9A-C]表示检查0到9和A到C(但不是a到c)。

注意:要测试 - 括号内(作为文字)它必须是第一个或最后一个,也就是说,[ - 0-9]将测试 - 和0到9。

^ - >方括号内的^(circumflex或插入符号)否定了表达式(我们将在后面的方括号外看到旋转/插入符号的替代用法),例如,[^ Ff]表示除大小写F和[^ az]之外的任何内容。 ]表示除小写a到z之外的所有内容。

您可以在我获得此信息的来源中查看有关它的更多说明:http://www.zytrax.com/tech/web/regex.htm

如果你想测试,你可以试试这个:http://gskinner.com/RegExr/

答案 1 :(得分:1)

以下是解释:

# server\-([^\-\.\d]+)(\d+)
# 
# Match the characters “server” literally «server»
# Match the character “-” literally «\-»
# Match the regular expression below and capture its match into backreference number 1 «([^\-\.\d]+)»
#    Match a single character NOT present in the list below «[^\-\.\d]+»
#       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
#       A - character «\-»
#       A . character «\.»
#       A single digit 0..9 «\d»
# Match the regular expression below and capture its match into backreference number 2 «(\d+)»
#    Match a single digit 0..9 «\d+»
#       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»

如果您打算使用正则表达式并且愿意花费一些资金,则可以使用RegexBuddy等程序。

您也可以使用this free web based explanation utility

答案 2 :(得分:1)

^表示不是括号内的以下字符之一

\- \.-.个字符

\d是一个数字

[^\-\.\d]+表示括号内的更多字符,因此一个或多个的任何内容都不是-.或数字。< / p>

(\d+)一个或多个号码

答案 3 :(得分:1)

以下是perl模块YAPE::Regex::Explain

给出的解释
The regular expression:

(?-imsx:server\-([^\-\.\d]+)(\d+))

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):
----------------------------------------------------------------------
  server                   'server'
----------------------------------------------------------------------
  \-                       '-'
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    [^\-\.\d]+               any character except: '\-', '\.', digits
                             (0-9) (1 or more times (matching the
                             most amount possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  (                        group and capture to \2:
----------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
----------------------------------------------------------------------
  )                        end of \2
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------