为这个复杂的元素找到正确的php正则表达式

时间:2010-08-13 09:52:49

标签: php regex preg-match-all

我正在尝试使用能够在字符串中找到以下部分的正则表达式。

[TABLE|head,border|{
#TEXT|TEXT|TEXT#
TEXT|TEXT|TEXT
TEXT|TEXT|TEXT
TEXT|TEXT|TEXT
}]

它来自一个简单的自制WYSIWYG编辑器,可以添加表格。但是表的“语法”应该像上面那样简单。

不,因为可能有很多这些表定义,我需要使用php的preg_match_all找到所有这些,以用html中众所周知的<table>标记替换它们。

正在尝试使用的正则表达式如下:

/\[TABLE\|(.*)\|\{(.*)\}\]/si

由于我的应用程序在Linux上运行,\x0A保留换行符这样就足够了(使用简单的正则表达式工作正常)。

我使用functions-online.com上的在线正则表达式测试器。

它获得的匹配并不是真的有用。如果我有多个像上面那样的TABLE定义,那么匹配就完全没用了。由于(。*)它涵盖了从“头部,边界”开始到最后一个“|”的所有内容第二个TABLE定义中的字符。

我想获得一个匹配列表,一个接一个地给我一个完整的表命令。

1 个答案:

答案 0 :(得分:2)

这是因为默认情况下。*将是一个贪婪的匹配,假设您的代码适用于仅包含单个值的输入。在两个。*之后放置一个问号应该可以防止贪婪成为一个问题。

/\[TABLE\|(.*?)\|\{(.*?)\}\]/si