-1

正規表現を含むコードを読んでいて、問題が発生しています。

誰かがそれを説明し、それが解析するテキストの例を挙げてもらえますか?

if(/\|\s*STUFF(\d+)\s*\|\s*STUFF(\d+)/) 
{
        $a = $1;
        $b = $2;
}
4

2 に答える 2

2

一致する文字列の1つは|STUFF1|STUFF2です。

YAPE :: Regex :: Explain

(?-imsx:\|\s*STUFF(\d+)\s*\|\s*STUFF(\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):
----------------------------------------------------------------------
  \|                       '|'
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  STUFF                    'STUFF'
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  \|                       '|'
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  STUFF                    'STUFF'
----------------------------------------------------------------------
  (                        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-21T01:59:01.313 に答える
2
\|\s*STUFF(\d+)\s*\|\s*STUFF(\d+)

\|リテラルパイプ文字を探します|

\s*任意の数(0個以上)の空白文字を探します。

STUFF文字列を探すSTUFF

(\d+)任意の桁数(1つ以上)を探し、それらをに保存します$1

\s*任意の数の空白文字(0個以上)を探します

次に1回繰り返し、次の桁シーケンスをに保存し$2ます。

正規表現が一致する場合、それを認識しており、定義する必要$1があります(つまり、値があります)。$2

その場合、$1変数$a$2にを割り当てます$b

照合する明示的な文字列が提供されていないため、$_変数が暗黙的に使用されます。

テキストの例:

foo bar |STUFF123|STUFF456 baz bar foo

foo |

  STUFF0 
|STUFF1234567890bar
于 2012-09-21T01:59:27.700 に答える