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 标记内,而 td 标记又应该在表标记内,而表标记之间可能不是另一个表标记.

这与我得到的一样接近:

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

但我认为我在 table 标签不应该存在的部分中遗漏了一些东西,所以在 table 和 td 标签之间。

4

1 回答 1

1

HTML 是一种上下文无关语言,而正则表达式用于正则语言。如果您查看形式语言的乔姆斯基层次结构,您会发现您尝试做的事情不可能以任何可靠的方式完成。

于 2012-09-02T13:48:33.400 回答