我的问题的标题有点复杂,我知道,但这基本上是我想做的:
假设我有这段文字:
[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 标签之间。