[英]Regular expression to match this query
我有这样一个句子:
Well, {hero}Superman X. 123 Sr.{/hero}, the most lovable guy was hated by {lover}Louis{/lover}.
我正在使用Java Regular Exp。 像这样(不起作用:当然):
Pattern search = Pattern.compile("}.*{\\/")
实际上,它为我提供了以下输出:
}Superman X. 123 Sr.{/hero}, the most lovable guy was hated by {lover}Louis{/
我实际上何时想要:“超人X.123 Sr.” 然后是“路易” 除了运行while循环并增加索引外,如何实现? 我可以尝试..但是试图知道是否有更简单的方法被我遗漏。
可能会有更好的正则表达式,但是这个(\\{\\w+\\})([\\w\\.\\s]+)(\\{/\\w+\\})
完成您的工作:
String test = "Well, {hero}Superman X. 123 Sr.{/hero}, the most lovable guy"+
" was hated by {lover}Louis{/lover}.";
Pattern p = Pattern.compile("(\\{\\w+\\})([\\w\\.\\s]+)(\\{/\\w+\\})");
Matcher m = p.matcher(test);
while(m.find()){
System.out.println(m.group(2));
}
那是因为默认情况下量词是贪婪的。 您想要一个懒惰的量词,所以尝试.*?
而不是.*
。
另外,您可能希望捕获标签本身:
Pattern.compile("\\{([^}]+)\\}(.*?)\\{/\1\\}");
请注意,我对Java正则表达式中的反向引用不是100%肯定当前语法,但是应该可以。 您应该在第一个捕获的子模式(在这种情况下为hero
或lover
中以标签名称结尾,在第二个子模式中以标签名称结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.