能正则表达式提取嵌入的字符串中的值中提取正值,如用相同的字符串中前面所定义的可变模板?或者这是更好的Java处理?例如:“2012法拉利[F12] - 鸵鸟皮内饰[F12#OL] - 糖果红色金属[F12#3]”变量模板是遇到方括号时遇到的第一个字符串,例如“F12#OL” [F12],和所希望的变量被该模板,例如的后续实例中发现'OL'和'3'。正则表达式从字符串
1
A
回答
0
既然你提的Java,我假设你正在使用的Java实现,Pattern。
Java的模式支持所谓反向引用,它可以用来匹配以前捕获组匹配的相同的值。
可惜你不能从一个单一的捕获组中提取多个值,所以你必须硬编码的,你想匹配,如果你想用一个模式做这个模板的数量。
对于一个变量,它看起来是这样的:
\[(.*?)\].*?\[\1#(.*?)\]
^^^^^ ^^^^^ variable
template ^^ back reference to whatever template matched
您可以添加更多可选的比赛由这样的包裹他们可选的非捕获组:
\[(.*?)\].*?\[\1#(.*?)\](?:.*?\[\1#(.*?)\])?(?:.*?\[\1#(.*?)\])?
^optional group ^another one
这将匹配以三个变量:
String s = "2012 Ferrari [F12] - Ostrich Leather interior [F12#OL] - Candy Red Metallic [F12#3]";
String pattern = "\\[(.*?)\\].*?\\[\\1#(.*?)\\](?:.*?\\[\\1#(.*?)\\])?(?:.*?\\[\\1#(.*?)\\])?";
Matcher matcher = Pattern.compile(pattern).matcher(s);
if (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
}
// prints F12, OL, 3, null
如果您需要匹配任意数量的变量,howev呃,你将不得不求助于在第一遍中提取模板,然后将其嵌入到第二种模式中:
// compile once and store in a static variable
Pattern templatePattern = Pattern.compile("\\[(.*?)\\]");
String s = "2012 Ferrari [F12] - Ostrich Leather interior [F12#OL] - Candy Red Metallic [F12#3]";
Matcher templateMatcher = templatePattern.matcher(s);
if (!templateMatcher.find()) {
return;
}
String template = templateMatcher.group(1);
Pattern variablePattern = Pattern.compile("\\[" + Pattern.quote(template) + "#(.*?)\\]");
Matcher variableMatcher = variablePattern.matcher(s);
while (variableMatcher.find()) {
System.out.println(variableMatcher.group(1));
}
+0
我需要的两步法。很棒。谢谢你们俩! – MichaelS 2012-07-06 21:06:21
相关问题
- 1. 正则表达式从字符串
- 2. 正则表达式从字符串
- 3. 正则表达式从字符串
- 4. 正则表达式从字符串
- 5. JS正则表达式从字符串
- 6. 正则表达式从字符串
- 7. 正则表达式从字符串
- 8. 正则表达式从字符串
- 9. 正则表达式从字符串
- 10. 正则表达式从字符串
- 11. 正则表达式从字符串
- 12. JavaScript正则表达式从字符串
- 13. 正则表达式 - 从字符串
- 14. 正则表达式从字符串
- 15. 正则表达式从字符串
- 16. 正则表达式从字符串
- 17. 正则表达式从字符串
- 18. 正则表达式从字符串
- 19. 正则表达式从字符串
- 20. Vb.net正则表达式 - 从字符串
- 21. 正则表达式从字符串
- 22. 正则表达式从字符串
- 23. 正则表达式从字符串
- 24. 从字符串与正则表达式
- 25. 正则表达式从字符串
- 26. 正则表达式:从字符串
- 27. 正则表达式从字符串
- 28. 正则表达式从字符串
- 29. 正则表达式从字符串
- 30. 正则表达式从字符串
您是否正在使用Java的正则表达式实现? – 2012-07-06 19:04:44