2016-09-14 7 views
0

私はHTML内のすべてのファイルリソースを取得しようとしています。Preg_match_allはpreg_matchと同じ結果を与えていません

正規表現の私の現在のバージョンは

"[^']*'([^"]*)'[^']*" | "([^"]*)" 

例のHTML(一部のみ)である:私は得ることができます

<div style="background-image: url('/courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg');display: block; margin-left: auto; margin-right: auto;"></div> 

         <img class="maximize" 
src="/courses/CURSODESTINOPEQUENO/document/learning_path/LECCION_1_2_3_4_5_-_corta/Diapositiva01-29332.jpg" style="display: block; margin-left: auto; margin-right: auto;" /> 

反復処理するpreg_match:

  • /コース/ UMASGRUPOBDEMO /document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg
  • /courses/CURSODESTINOPEQUENO/document/learning_path/LECCION_1_2_3_4_5_-_corta/Diapositiva01-29332.jpg

を最大限しかしpreg_match_allだけ私に次のものを与える:

  • /コース/ UMASGRUPOBDEMO /文書/ learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg
  • あなたはそれをテスト生きることができる

at http://www.phpliveregex.com/p/h6T

これは意味がありますか?おそらく私の正規表現は機能するものが必要でしょう。

私は正規表現に関する多くの経験がありません。助けてください:)

ありがとうございます!

を追加しました:

正規表現が実際のようなものです:二重引用符なしで任意の文字列が含まれており、また、それらの間での任意のコンテンツを持つ内部の2重引用符が含まれている二重引用符で区切られた任意の文字列

  • (二重引用符なし)内のオプション内容私が見ていたよう

、多分無いと

  • または2個の二重引用符引用符なし二重引用符の条件は今長いHTMLの例を使用して...

    をより良い正規表現を持つには少し触れする必要があります。http://www.phpliveregex.com/p/h74

    <p><img class="maximize" src="/courses/UMASGRUPOBDEMO/document/learning_path/Diapositiva54/Diapositiva2.jpg" style="display: block; margin-left: auto; margin-right: auto;" alt="" /></p> 
    
    <div style="background-image: url('/courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg');display: block; margin-left: auto; margin-right: auto;"></div> 
    
             <img class="maximize" 
    src="/courses/CURSODESTINOPEQUENO/document/learning_path/LECCION_1_2_3_4_5_-_corta/Diapositiva01-29332.jpg" style="display: block; margin-left: auto; margin-right: auto;" /> 
    
  • +0

    最初にオフにしてください。正規表現ではesはフォーマットされません。 –

    +0

    オクラホマ、私はまた、ORの2つの部分を分けて、より簡単に見えるようにしました。 – LanderTaker

    答えて

    1

    ではなく、この正規表現を試してみてください:

    "[^"']*'([^"']*)'[^"']*"|"([^"]*)" 
    

    あなた元の正規表現は、入力の2番目の'からの最後のまでのすべてを貪欲に拾っていました。

    は、正規表現で *+事業者はそれらが一致するために、可能な限り を消費します意味貪欲であることを忘れないでください。

    あなたはどちらか(私は上記したよう)これらの演算子が適用されているものを制限または*?または+?を使用することによって、それをサポートする正規表現のシステムのための非貪欲オペレータにそれらを有効にする必要があります。

    "[^']*?'[^"]*?'[^']*?" 
    

    (しかし、最後のものには、<img src="foo" alt='bar' class="myimage" />などの問題があります。" -delimited stringの一部ではないにしても、'bar'を取得します)

    +0

    最初のものは魅力のように機能します! (私が見た限り!)。 もう1つは仕事が必要ですが、私はその考えを得ると思います。 – LanderTaker

    関連する問題