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

发布于 2024-09-14 12:48:20 字数 774 浏览 3 评论 0原文

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

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

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

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

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

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

\x0A 保留换行符,因为我的应用程序在 Linux 上运行,这已经足够了(使用更简单的正则表达式可以正常工作)。

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

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

我想获得一个匹配列表,为我一一提供完整的表命令。

I'm trying to get a regex which is able to find the following part in a string.

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

Its from a simple self made WYSIWYG Editor, which gives the possibility to add tables. But the "syntax" for a table should be as simple as the one above.

No as there can be many of these table definitions, I need to find all with php's preg_match_all to replace them with the well known <table> tag in html.

The regex iam trying to use for is the following:

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

The \x0A stays for a newline as my app is running on Linux this is enough (works fine with simpler regex).

I use the online regex tester on functions-online.com.

The matches it gets are not really usefull. And if i have more than one TABLE definition like the one above, then the matches are completely useless. Because of the (.*) it covers all from starting from "head,border" going to the very last "|" character in the second TABLE definition.

I would like to get a list of matches giving me the complete table command one by one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沩ん囻菔务 2024-09-21 12:48:20

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

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

This is because by default the .* will be a greedy match, assuming your code works correctly for an input containing only a single value. Placing a question mark after the two .*'s should prevent greedyness being an issue.

/\[TABLE\|(.*?)\|\{(.*?)\}\]/si
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文