2011-12-08 5 views
1

私はphp preg_match_all関数がついています。多分誰かが正規表現で私を助けるだろう。我々はいくつかのコードを持っていると仮定しましょう:正規表現に固執しました

[a]a[/a] 
[s]a[/s] 
[b]1[/b] 
[b]2[/b] 
... 
... 
[b]n[/b] 
[e]a[/e] 
[b]8[/b] 
[b]9[/b] 
... 
... 
[b]n[/b] 

私は[s][e]タグの間に位置[b]タグ内のすべてのものと一致する必要があります。何か案は?

+0

間のすべてに読ん表示されるまで、次の2つの間の[S] [B]タグの内容を一致させると言っているモードを消費し、各ラインのためにタグまたは2つの[e]タグの間、または[s]タグと[e]タグの間にあるか? – smitec

+0

私はANDを意味します。上記の例の結果は、1,2、..、n –

+0

とする必要があります。 – jwd

答えて

0

正規表現だけではXMLを解析するには不十分で、ここでは簡略化されたXML言語のようです。

1

簡単にするために、2つのpreg_matchコールを使用してください。

あなたが/\[s](.+?)\[e]/sを検査したいリストを取得する最初の。
そして、結果の文字列を使用して、含まれている/\[b](.+?)\[\/b]/sのものと一致します。

+0

これはどのような方法でも実行できますか? –

+0

私が知っているわけではありません。 – mario

1

あなたは、本質的にHTMLやXMLのように、パターンマッチにツリー状の構造を持っている何かをしようとしているように見えます。あなたが "一致するYタグの中にあるXを見つける"とあなた自身が気づいているときはいつでも、あなたはこの問題を抱えています。

正規表現でこの種の作業をしようとするのは悪い考えです。

ここdifferent answer of mine for a similar questionから貼り付けいくつかの情報のコピー/です:

にあなたが取得している難易度のアイデアを与えるだろう同様のSOポストにいくつかの参照:

「正しいこと」は、入力を解析して状態を維持することです。これは、テキストをスキャンし、現在のタグのスタックを保持するのと同じくらい簡単です。

+0

なぜdownvote? – jwd

2

あなたの構造は、私が個人的に正規表現(言語のこれらの砦ではない良いアイデアを)避け、単に各ラインの二文字を確認します上記と全く同じである場合。あなたはsがに行くのを見たら、あなたはeは最初]を見つけて、その、次の[

関連する問題