正则表达式完美无缺,但问题是它还包括下一次出现而不是以第一次出现结束然后再从
开始 正则表达式: (?=<appView)\s{0,1}(.*)(?<=<\/appView>)
字符串: <appView></appView> <appView></appView>
但我的问题是,吃完就像
一样
(Match 1)<appView></appView> <appView></appView>
我希望它以不同的方式搜索群组,但我无法让它发挥作用。
所需输出:(匹配1)
<appView></appView>
(匹配2)<appView></appView>
答案 0 :(得分:1)
\s{0,1}
等于\s?
您需要使用(.*?)
来代替(.*)
使用此模式:~(?=<appView)\s?(.*?)(?<=</appView>)~
*请注意,如果使用斜杠以外的其他内容作为模式分隔符,则不必在结束标记中转义/
。我在模式的开头和结尾使用~
以避免转义。
答案 1 :(得分:0)
我完全建议从正则表达式切换到实际的顺序xml解析器。正则表达式对于解析基于xml的文件很有帮助,例如由于下面的问题。
那说,你可以修复&#34;你的正则表达式使用([^<>]*)
。这将匹配没有<
或>
的所有字符,这将确保没有其他标记嵌套在里面。如果使用所有代码,则无法匹配<appview><unclosedTag></appView>
之类的内容,因为它无效。如果您可以确定结构是正确的,那么这个问题就不那么重要了。
您的方法遇到的另一个问题是,如果您有嵌套标签,请执行以下操作:<appView> something <appView> something else </appView> else </appView>
,您的方法会让您最终得到[replaced] else </appView>
。