使用正则表达式提取字符串中的某些数据项

bob*_*obo 0 regex string

<![Apple]!>some garbage text may be here<![Banana]!>some garbage text may be here<![Orange]!><![Pear]!><![Pineapple]!>
Run Code Online (Sandbox Code Playgroud)

在上面的字符串中,我想有一个匹配所有的正则表达式<![FruitName]!>,在这些之间<![FruitName]!>,可能有一些垃圾文本,我的第一次尝试是这样的:

<!\[[^\]!>]+\]!>
Run Code Online (Sandbox Code Playgroud)

它有效,但你可以看到我使用过这个部分:

[^\]!>]+
Run Code Online (Sandbox Code Playgroud)

这杀死了一些无辜的人.如果水果名称包含以下任何一个字符: ] ! >它会被丢弃,我们喜欢吃水果,以至于不应该这样.

我们如何构造一个]!>在FruitName中完全禁止这个字符串的正则表达式,而所有这些仍然可以获得?

上面的例子只是由我编写的,我只是想知道如果必须在正则表达式中完成正则表达式会是什么样子.

Tim*_*ker 6

最简单的方法是<!\[.+?]!>- 根本不关心两个分隔符之间的匹配.只确保它尽可能早地与结束分隔符匹配 - 因此?使量词变得懒惰.

(另外,没必要逃避])

关于在]!>水果名称中应该"禁止" 序列的规范- 这是隐含的,因为它结束分隔符.