2016-10-21 11 views
2

ここでは、文字列では動作しません:PHP正規表現は

$test = '<a id="test">One &amp; -Two&nbsp;-&nbsp;Three</a>'; 

そして、私は2つの貴様にそれらの2つの文字列をキャッチしたいような変数:

$string1 = 'One &amp; -Two'; 

$string2 = 'Three'; 

私はpreg_match_allを使用しましたが、正規表現に問題があります:

preg_match_all('#([-;\w\ \.\/\'\d\(\)\&]+)+&nbsp;-&nbsp;([\w+\ \.\-]+)+#', $test, $matches); 

それが動作しない理由を誰かが私に説明してもらえ..?私は..私はここに尊重しない「ルール」が表示されない

+0

あなたは正規表現を使用して、HTML要素から値を取得しようとしている参照してください

$test = '<a id="test">One &amp; -Two&nbsp;-&nbsp;Three</a>'; $res = explode("&nbsp;-&nbsp;", strip_tags($test)); echo $res[0]. "\n" . $res[1]; 

:また

、私はあなたが、ここに任意の正規表現を必要とするexplodestrip_tagsを使用していないと思いますDOMや単純なHTML DOMは 'ことに注意して – Kumar

+0

使用 - ;マッチングあなたはまた、持っている –

+0

を失敗した場合([。\ W \ \ \/\ '\ D \(\)\&] +)+' *、壊滅的なバックトラックを開始*たくさんの不必要なバックスラッシュがあり、読みにくいものになります。 –

答えて

1

最初+)([-;\w\ \.\/\'\d\(\)\&]+)+causes the catastrophic backtracking issuemore on this hereを参照)、これはエンディングではないパターンの(a+)+タイプの場合のようにサブパターン。その+は既にsolves the issueです。

最後のサブパターンは非常に同じ問題を持っていますが、原因内部PCREの最適化にトラブルを起こしていません。 、もしそうなら、PHP demo

+1

をしたいように、私はまだ、この文字列をキャッチする方法を見つけることができません。どうも – hacko