java - 正则表达式匹配一个字符(如果出现)

标签 java regex

我需要匹配如下字符串:

  1. 将所有内容匹配到 ;
  2. 如果-发生,匹配最多为 -不包括 -

例如:

  • 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/

相关文章:

java - 自定义 Java 按名称排序

c++ - 正则表达式替换:到 ":"等

java - Tomcat中的PreparedStatement缓存

java - 如何在 Intellij IDEA 社区版中为 gradle spring boot 项目设置 spring.config.location?

java - 在类里面以正确的方式进行设计时遇到问题

regex - 使用正则表达式检测空白

python - 识别给定单词序列前面的字符串

Java System.getProperty( "user.timezone") 不起作用

ruby-on-rails - 用于验证 Google map 纬度经度的 Rails 正则表达式

html - 上传前批量替换数百个html文件的div内容