字符串分隔的正则表达式

cde*_*ker 1 java regex parsing bbcode

我正在尝试构建一个bbcode解析器,但是我在解决如何避免过于广泛匹配时遇到了一些问题.例如,我想实现[list]转换为这样的转换:

\[list\](.*)\[/list\]
Run Code Online (Sandbox Code Playgroud)

将被替换为:

<ul>$1</ul>
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非我有两个列表,其中正则表达式匹配第一个列表的开始标记和第二个列表的结束标记.所以这

[list]list1[/list] [list]list2[/list]
Run Code Online (Sandbox Code Playgroud)

成为这个:

<ul>list1[/list] [list]list2</ul>
Run Code Online (Sandbox Code Playgroud)

这会产生非常难看的输出.有关如何解决此问题的任何想法?

Cha*_*rch 8

您正在使用的方法可能不会成为一种特别好的方法,但要解决该特定问题,只需更改为非贪婪匹配:

\[list\](.*?)\[\/list\]
Run Code Online (Sandbox Code Playgroud)

请注意,这种方式会遇到嵌套列表而不是背靠背列表的问题.