0

HTMLソースからの特定のスパンタグを一致させようとしています。

タグのlang属性と内部HTMLは、新しい文字列を返す関数のパラメーターとして使用されます。

古いタグ、属性、コンテンツを呼び出された関数の結果に置き換えたい。

件名は次のようになります。

<p>Some codesnippet:</p>
<span lang="fsharp">// PE001
let p001 = [0..999]
           |> List.filter (fun n -> n % 3 = 0 || n % 5 = 0)
           |> List.sum
</span>
<p>Another code snippet:</p>
<span lang="C#">//C# testclass
class MyClass {
}
</span>

lang属性とコンテンツの値を抽出するために、これらの値を次の式でグループ化します。

/(<span lang="(.*)">(.*)</span>)/is

正規表現は貪欲になる傾向があるため、この式は、1つのスパンタグとそのコンテンツだけでなく、完全な主題に一致します。

1つのスパンタグだけを一致させるにはどうすればよいですか?

4

3 に答える 3

5

二度とそれを繰り返すことはありません:HTMLを操作するために正規表現を使用しないでください!


代わりに、を使用してDOMDocument::loadHTMLください。

DOMを使用してHTMLデータを操作できるようになります。これは、はるかに強力で簡単です。次のことができるようになります。

本当に:DOMを学ぶために時間をかけてください:それは素晴らしい投資です!

于 2011-03-11T12:00:39.247 に答える
1

を使用して貪欲でないように指定できます?

/(<span lang="(.*?)">(.*?)<\/span>)/is

または、 PCRE_UNGREEDY修飾子を使用して、デフォルトですべての式を貪欲にしない

/(<span lang="(.*)">(.*)<\/span>)/Uis

于 2011-03-11T12:02:01.770 に答える
1

追加するだけ、 おもう

/(<span lang="(.*?)">(.*?)</span>)/is
于 2011-03-11T12:04:53.623 に答える