0

preg_match の正規表現は として与えられ/server\-([^\-\.\d]+)(\d+)/ます。誰かがこれが何を意味するのか理解するのを手伝ってくれますか? 文字列がで始まるのがわかりますが、server-取得できません([^\-\.\d]+)(\d+)'

4

4 に答える 4

2

[ ]-> 1 文字の位置に対して角括弧内のすべてのものと 1 回だけ一致します。たとえば、[12] はターゲットが 1 に一致することを意味し、それが一致しない場合はターゲットが 2 に一致することを意味し、[0123456789] は任意の文字に一致することを意味します0 から 9 の範囲。

- -> 角括弧内の - (ダッシュ) は「範囲区切り」であり、範囲を定義できます。上記の [0123456789] の例では、[0-9] と書き換えることができます。

リスト内に複数の範囲を定義できます。たとえば、[0-9A-C] は、0 から 9 および A から C をチェックすることを意味します (ただし、a から c はチェックしません)。

注: - を (リテラルとして) ブラケット内でテストするには、最初または最後に来る必要があります。つまり、[-0-9] は - と 0 から 9 をテストします。

^-> 角括弧内の ^ (サーカムフレックスまたはキャレット) は式を否定します (角括弧の外側のサーカムフレックス/キャレットの別の使用法については後で説明します)。たとえば、[^Ff] は、大文字または小文字の F および [ ^az] は、小文字の a から z を除くすべてを意味します。

この情報を入手したソースで、それに関する詳細な説明を確認できます: http://www.zytrax.com/tech/web/regex.htm

そして、テストしたい場合は、これを試すことができます: http://gskinner.com/RegExr/

于 2012-09-11T12:19:55.470 に答える
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
----------------------------------------------------------------------
于 2012-09-11T12:24:15.417 に答える
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などのプログラムを使用できます。

この無料の Web ベースの説明ユーティリティも使用できます。

于 2012-09-11T12:17:52.307 に答える
1

^括弧内の次の文字のいずれでもないことを意味します

\- \.-.文字です

\dは数字です

[^\-\.\d]+は括弧内の複数の文字を意味するため、 、または数字以外の1 つまたは複数の文字を意味します。-.

(\d+)1 つ以上の数字

于 2012-09-11T12:18:30.007 に答える