[英]Regular expression help in java
在构建正则表达式字符串时我迷失了方向。 我需要一个执行以下操作的正则表达式。
我有以下字符串:
[~class:obj]
[~class|class2|more classes:obj]
[!class:obj]
[!class|class2|more classes:obj]
[?method:class]
[text]
一个字符串可以有多个上面的内容。 示例字符串将是“[if] [!class:obj]”
我想知道[]和分成匹配组之间的内容。 例如,第一个匹配组将是符号(如果存在)(〜|!|?)接下来是什么:所以可以是类或类| class2 | etc ...然后在右边的:和在之前停止]。 可能没有:以及之前的事情,但只是[]之间的事情。
那么,我将如何编写这个正则表达式呢? 是否可以给出匹配组名称,以便我知道它匹配的是什么?
这是一个java项目。
提前致谢。
如果您对输入足够肯定,可以使用/\\[(\\~|\\!|\\?)?(?:((?:[^:\\]]*?)+):)?([^\\]]+?)\\]/
。 (要将其转换为Java,您需要转义反斜杠并使用引号而不是正斜杠)
我认为这应该有效:
/[(.*?)(?:\|(.*?))*]/
也:
[a-z]*
试试这个代码
final Pattern
outerP = Pattern.compile("\\[.*?\\]"),
innerP = Pattern.compile("\\[([~!?]?)([^:]*):?(.*)\\]");
for (String s : asList(
"[~class:obj]",
"[if][~class:obj]",
"[~class|class2|more classes:obj]",
"[!class:obj]",
"[!class|class2|more classes:obj]",
"[?method:class]",
"[text]"))
{
final Matcher outerM = outerP.matcher(s);
System.out.println("Input: " + s);
while (outerM.find()) {
final Matcher m = innerP.matcher(outerM.group());
if (m.matches()) System.out.println(
m.group(1) + ";" + m.group(2) + ";" + m.group(3));
else System.out.println("No match");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.