どのような正規表現は、表のセル内に識別テキストとネストされたテーブルに一致するでしょうか?

StackOverflow https://stackoverflow.com/questions/1505277

  •  19-09-2019
  •  | 
  •  

質問

どのような正規表現は、表のセル内に識別テキストとネストされたテーブルに一致するでしょうか?私が試したが、私は出ては例の両方のテーブルの開始と終了をつかんでほしい特定のテーブルを抽出するために、正規表現を思い付くことができなかったしました。ここで始めるために何かがある:「<table>.*?</table>

<table>
    <tr>
        <td>
            <table>
                <tr><td>Code1</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr><td>Code2</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
</table>

私は「CODE2」を含むテーブルを抽出したいと言います。どのような正規表現、特に一致し、そのテーブルのみのでしょうか?

役に立ちましたか?

解決

次の正規表現は、あなたのテーブルを見つけます。

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table>

あなたは「複数行マッチ」(?ms)と「ドットがあまりにも、改行にマッチする」(m)をオンに(s)付き。そして、あなたはあなたの試合の内部でテーブルのない第2のスタートを持っていないことを確認するために、負の先読み(?!)を持っています。

他のヒント

HTMLが通常ではないので、私は、この上で正規表現を使用することはありません、あなたをつまずかせるために、エッジの例は終わりはありません。あなたは、HTMLパーサを使用して方がいいでしょう。あなたが使用しているどの言語やプラットフォーム、利用できるものができるでしょう。

正規表現を使用しないでください。 HTMLパーサを使用してください!

しかし、Perlで(ネストされたテーブルを持っていないと仮定した場合):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top