2017-08-24 87 views
0

下一个occurence正则表达式的作品完美,但问题是,它也包括在未来出现,而不是从正则表达式包括文字

正则表达式再次与第一次出现结束后启动:(?=<appView)\s{0,1}(.*)(?<=<\/appView>)

字符串:<appView></appView> <appView></appView>

但我的问题是,它吃的匹配整个单词像

(Match 1)<appView></appView> <appView></appView>

我希望它不同的搜索组,但我不能使它发挥作用。

所需的输出:(1场)<appView></appView>(2场)<appView></appView>

回答

1

\s{0,1}等于\s?您需要使用(.*?)是不是(.*)

使用此模式懒:~(?=<appView)\s?(.*?)(?<=</appView>)~

Demo Link

*注意,如果您使用非斜线作为模式分隔符,则不必在结束标记中转义/。我在模式的开始和结束时使用~以避免转义。

+0

这工作。我浪费了3个小时试图解决这个问题。你救了我。 –

+0

@ReyanTropia不要走开。我们来谈谈这个。 – mickmackusa

+0

你想做什么?你在捕捉?证实?更换? – mickmackusa

0

我完全推荐从正则表达式切换到一个实际的顺序xml解析器。例如由于下面的问题,正则表达式对于解析基于xml的文件非常有用。

也就是说,你可以使用([^<>]*)来“修复”你的正则表达式。这将匹配没有<>的所有字符,这将确保没有其他标签嵌套在里面。如果使用所有标签,则无法匹配<appview><unclosedTag></appView>之类的内容,因为它无效。如果你可以肯定结构是正确的,那么这个问题就少一些。

你的方法存在的另一个问题是,如果你有这样的嵌套标签:<appView> something <appView> something else </appView> else </appView>,你的方法会让你最终得到[replaced] else </appView>

+0

内的内容无关紧要。这将由持有其内容的组件所取代。我试图创建一个类似于角度为 –

+0

的组件的PHP框架,除了它确实很重要。我编辑了我的答案,以展示您的方法存在的另一个问题。你的方法是天真的,从长远来看,它会来咬你。如果您正在构建框架,请解析一次结构,然后操作树。它更健壮,如果为更多数量的标签完成,速度会更快。 – Sumurai8

+0

你推荐以哪种解析器开始?我会看一看 –