1

我正在尝试获得一个能够在字符串中找到以下部分的正则表达式。

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

它来自一个简单的自制所见即所得编辑器,它提供了添加表格的可能性。但是表格的“语法”应该和上面的一样简单。

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

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

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

当我的应用程序在 Linux 上运行时,换行符的\x0A保留就足够了(适用于更简单的正则表达式)。

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

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

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

4

1 回答 1

2

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

/\[TABLE\|(.*?)\|\{(.*?)\}\]/si
于 2010-08-13T10:06:39.180 回答