为这个复杂元素找到正确的 php 正则表达式
我正在尝试获取一个正则表达式,它能够在字符串中找到以下部分。
[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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为默认情况下 .* 将是贪婪匹配,假设您的代码对于仅包含单个值的输入正确工作。在两个 .* 之后放置一个问号应该可以防止贪婪成为问题。
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.