3

私の質問のタイトルは少し複雑ですが、基本的に私がやりたいことは次のとおりです。

次のテキストがあるとします。

[table]
[tr]
[td]test str 1[/td]
[td]test str 2[/td]
[/tr]
[/table]

私が見つけることを可能にする正規表現はありますか?

  • [td] タグと [/td] タグの間にある文字列
  • [td] から [/td] までの部分全体が [table] タグと [/table] タグの間にある
  • また、[table] タグと [td] タグの間のテキストに [/table] タグを含めることはできません
  • [/td] タグと [/table] タグの間のテキストに [table] タグを含めることはできませ

当たり前のように聞こえるかもしれませんが、この正規表現はユーザー入力の処理に使用されるため、安全な正規表現である必要があり、ユーザーがテーブルの外で [td] を入力した場合 (すべてのタグは html に変換されます)、サイトのページのレイアウトに使用されるテーブルに影響を与えます。

したがって、最初に「test str 1」に一致し、次に「test str 2」に一致する必要がありますが、その文字列が td タグ内にある場合に限ります。これは、テーブルタグ内にある必要があり、その間に別のテーブルタグがない場合があります.

これは私が得た限り近いです:

/\[table(.*?)\]((?!\[\/table\]).*?)\[td(.*?)\](.*?)\[\/td\]((?!\[table(.*?)\]).*?)\[\/table\]/si

しかし、テーブルタグがあってはならない部分、つまりテーブルタグと td タグの間に何かが欠けていると思います。

4

1 に答える 1

1

HTML は文脈自由言語ですが、正規表現は正規言語用です。形式言語のチョムスキー階層を見れば、あなたがやろうとしていることは、信頼できる方法では不可能であることがわかります。

于 2012-09-02T13:48:33.400 に答える