Regex来查找2个字符串之间的字符串,该字符串位于子字符串可以';I don’我一个字也没有


Regex to find a string between 2 strings that are between 2 strings of which the substrings can't contain a word

我知道我问题的标题有点复杂,但基本上我想做的是:

假设我有一段文字:

[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",然后匹配"teststr 2",但前提是该字符串在td标记内,而td标记又应该在表标记内,表标记之间可能不是另一个表标记。

这是我得到的最接近的:

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

但我想我在表标记不应该存在的部分遗漏了一些东西,所以在表和td标记之间。

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