どのような正規表現は、表のセル内に識別テキストとネストされたテーブルに一致するでしょうか?
-
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;
所属していません StackOverflow