我需要匹配如下字符串:
- 将所有内容匹配到
;
- 如果
-
发生,匹配最多为-
不包括-
例如:
-
abc;
应该返回abc
-
abc-xyz;
应该返回abc
Pattern.compile("^(?<string>.*?);$");
使用上面我可以实现一半。但不知道如何改变这种模式来实现第二个要求。我如何更改 .*?
以便它在第一次出现 -
时停止
我不擅长正则表达式。任何帮助都会很棒。
编辑
我需要将其捕获为一组。我无法更改它,因为还有许多其他模式可以匹配和捕获。这是我发布的唯一部分。
代码如下所示。
public static final Pattern findString = Pattern.compile("^(?<string>.*?);$");
if(findString.find())
{
return findString.group("string"); //cant change anything here.
}
最佳答案
只需使用否定的 char 类。
^[^-;]*
即。
Pattern p = Pattern.compile("^[^-;]*");
Matcher m = p.matcher(str);
while(m.find()) {
System.out.println(m.group());
}
这将匹配开头的任何字符,但不匹配 -
或 ;
,零次或多次。
关于java - 正则表达式匹配一个字符(如果出现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32606782/