匹配直到出现0或1

时间:2018-10-25 10:07:53

标签: java regex

我使用下面的代码尝试将字符串“ this is a test 1”拆分为一个数组,其中第一个元素包含字符串“ this is test”,第二个元素包含1

final Pattern mp = Pattern.compile("/.+?(?=0|1)/");
System.out.println(Arrays.asList(mp.split("this is a test 1")[0]));

当我执行此代码时,将显示以下内容:

[this is a test 1]

正则表达式"/.+?(?=0|1)/"用于匹配所有字符串,直到遇到1或0。

如何返回Array(“ this is a test”,1)?

更新:

是否还应该返回相同的模式:

final Pattern reg = Pattern.compile("/.+?(?=0|1)/");
    System.out.println(reg.matcher("this is a test 1").group(0));

它引发异常:

Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)
    at First.main(First.java:58)

但是基本上是相同的代码,但是更短吗?

4 个答案:

答案 0 :(得分:1)

您有一个模式,但是实际上您需要创建一个Matcher来将字符串与您的模式匹配。可以在下面找到一个示例:

public static void main(String[] args) {
    final String regex = ".+?(?=0|1)";
    final String string = "this is a test 1";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    if (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

您似乎希望同时拥有这两个元素,但是当前的正则表达式不允许这样做。尝试使用(.+?)([0-1]),它将这两个元素都放入组中。示例:

public static void main(String[] args) {
    final String regex = "(.+?)([0-1])";
    final String string = "this is a test 1";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    if (matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
}

答案 1 :(得分:0)

尝试使用正则表达式(?=0|1)将字符串拆分为this is a test1

String mp="this is a test 1";
System.out.println(Arrays.asList(mp.split("(?=0|1)")));

答案 2 :(得分:0)

使用此

    String text="this is a test 1";
    System.out.println(Arrays.asList(text.split("(?=[01])")));

答案 3 :(得分:0)

您希望在1|0之前的空格处进行拆分,因此可以使用先行断言:

String res = "this is a test 1 and 0 is it".split(" (?=(0|1))")

哪个返回{ "this is a test", "1 and", "0 is it" }