我一直在尝试在字符串中提取“指针”,以使用正则表达式将它们替换为实际值。源字符串是从数据库中提取的,可以是几种形式 - 我希望你能看出我的意思:
我需要从中提取信息的字符串格式为<X Description> blah blah <Y> blah blah blah <Z Differentdescription>
我需要提取
<X Description>,
<Y>,
<Z Differentdescription>
来自字符串(以便在显示给用户之前可以用实际值替换它们。)
我认为这样的事情会起作用:(<[XYZ]( \w+)?>)+
但是,它只捕获“<X Description>
”标签(它的含义),以及“描述”(我不太明白),并且不捕获{{1 }或<Y>
我不是要解析XML或HTML(我知道这是用正则表达式不赞成的),并且不会有任何嵌套标签,我只需要获得匹配序列。
最终这将用于Android应用程序,但我需要首先使用正则表达式!
答案 0 :(得分:1)
你可以使用正面看法和正面向前看这样:
String str = "<X Description> blah blah <Y> blah blah blah <Z Differentdescription>";
Pattern pattern = Pattern.compile("(?<=<)[\\w\\s]+?(?=>)");
Matcher m = pattern.matcher(str);
while(m.find()){
System.out.println(m.group(0));
}
<
后跟任何字或空格>
输出:
X Description
Y
Z Differentdescription
答案 1 :(得分:0)
你的正则表达式,(<[XYZ]( \w+)?>)+
接近于你想做的事情,但第二组括号(即( \w+)
)也形成了一个捕获。
如果您将正则表达式更改为(<[XYZ](?: \w+)?>)
,它应该可以正常工作。 ?:
使括号无法捕获。
并且不会捕获
<Y>
或<Z Description>
这是因为您没有在正则表达式中使用g
选项,所以它在第一次匹配后终止。