2016-07-25 7 views
0

を得るように見えることはできませんラボ-JL-PPR-ウェブ「から "-ppr:ラボ-JL-PPR-ウェブ "文字列" 次の正規表現を使用しては、私はこのようになります文字列を持っている右のPHPの正規表現の数量詞

preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*)/i",$line,$matches); 

第2のグループは現在、全体にマッチします"。私は適切な数量を指定しようとしていますが、これまでのところ私は適切な数量を得ていません。私は次のように試しました:

preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*){3}/i",$line,$matches); 

私はそれを試していますが、ヒントがあれば、私はそれを感謝します。おかげさまで

+0

を拡大しました。 – cmorrissey

+0

'[]'は1文字にマッチし、 '[] {3}'は行内の指定された3文字にマッチします。 3文字の3つのSETとは一致しません。 –

答えて

1

なぜだけではなく、

/..snip.. server ([\w*\.\-]*)-web/i 

-webをキャプチャグループの外に保つだけです。

0

私は確かに正当だと思われますが、私は確かに良い方が書かれています。

^log domain ([a-zA-Z\.]+) server ([a-zA-Z\.\-]+)-web$ 

ここでは、preg_match_all機能で、次のアプローチを使用し

LiveRegex

0

それをテストすることができます。

$str = "log domain jl.lab.test.net server lab-jl-ppr-web"; 
preg_match_all("/\b\w+\.\w+\.\w+\.\w+\b|\b\w+-\w+-\w+(?=-\w+?)\b/U", $str, $matches); 

print_r($matches[0]); 

出力を:

Array 
(
    [0] => jl.lab.test.net 
    [1] => lab-jl-ppr 
) 
1

これはおそらく動作します

'~"msg":[ ]"log[ ]domain\s([\w.]*)[ ]server[ ]((?:(?!-web)[\w.-])*)~' 

しかし、あなたが探しているものを正規表現から得るのは難しいです。

は、いくつかの例を含めるようにあなたの質問を更新し、あなたの予想最終的な出力、あなたが現在使用して言葉遣いはそれが混乱になり下さい

"msg": [ ] "log [ ] domain \s 
([\w.]*)     # (1) 
[ ] server [ ] 
(       # (2 start) 
     (?: 
      (?! -web) 
      [\w.-] 
    )* 
)        # (2 end) 

出力

** Grp 0 - (pos 0 , len 52) 
"msg": "log domain jl.lab.test.net server lab-jl-ppr 
** Grp 1 - (pos 19 , len 15) 
jl.lab.test.net 
** Grp 2 - (pos 42 , len 10) 
lab-jl-ppr 
関連する問題