Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时提取匹配和不匹配正则表达式_Java_Regex - Fatal编程技术网

Java 同时提取匹配和不匹配正则表达式

Java 同时提取匹配和不匹配正则表达式,java,regex,Java,Regex,我有一个像这样的字符串abc3a de'f gHi?jk我想把它分成子字符串abc3a,de'f,gHi?还有jk。换句话说,我想返回与正则表达式[a-zA-Z0-9']匹配的字符串和与此正则表达式不匹配的字符串。如果有一种方法可以判断每个结果子字符串是否匹配,这将是一个加号 谢谢 您可以使用此正则表达式: "[a-zA-Z0-9']+|[^a-zA-Z0-9' ]+" 将提供: ["abc3a", "de'f", "gHi", "?", "jk"] 在线演示: Java代码: 输出 在该字

我有一个像这样的字符串abc3a de'f gHi?jk我想把它分成子字符串abc3a,de'f,gHi?还有jk。换句话说,我想返回与正则表达式[a-zA-Z0-9']匹配的字符串和与此正则表达式不匹配的字符串。如果有一种方法可以判断每个结果子字符串是否匹配,这将是一个加号


谢谢

您可以使用此正则表达式:

"[a-zA-Z0-9']+|[^a-zA-Z0-9' ]+"
将提供:

["abc3a", "de'f", "gHi", "?", "jk"]
在线演示: Java代码: 输出 在该字符集中字符行之间的所有边界上拆分

后面的人? 输出:

Match:abc3a
Miss: ` `
Match:de'f
Miss: ` `
Match:gHi
Miss: `?`
Match:jk
如果你不想要空白

Pattern pattern = Pattern.compile("([a-zA-Z0-9']*)?([^a-zA-Z0-9'\\s]*)?");
输出:

Match:abc3a
Match:de'f
Match:gHi
Miss: `?`
Match:jk

可以使用锚点进行拆分

    private static String[] splitString(final String s) {
        final String [] arr = s.split("(?=[^a-zA-Z0-9'])|(?<=[^a-zA-Z0-9'])");
        final ArrayList<String> strings = new ArrayList<String>(arr.length);
        for (final String str : arr) {
            if(!"".equals(str.trim())) {
                strings.add(str);
            }
        }
        return strings.toArray(new String[strings.size()]);
    }

?=xxx意味着xxx将跟随这里,所以基本上你在[?!]处拆分字符串,或者你的计划是什么?你可以否定它,[^a-zA-Z0-9']@我在[a-zA-Z0-9']之外的任何字符串上拆分的构造函数,例如:@J.p.如果我否定它,我将切换到另一侧。我要匹配字符串和不匹配字符串。@gtgaxiola,谢谢。固定的
Match:abc3a
Miss: ` `
Match:de'f
Miss: ` `
Match:gHi
Miss: `?`
Match:jk
Pattern pattern = Pattern.compile("([a-zA-Z0-9']*)?([^a-zA-Z0-9'\\s]*)?");
Match:abc3a
Match:de'f
Match:gHi
Miss: `?`
Match:jk
    private static String[] splitString(final String s) {
        final String [] arr = s.split("(?=[^a-zA-Z0-9'])|(?<=[^a-zA-Z0-9'])");
        final ArrayList<String> strings = new ArrayList<String>(arr.length);
        for (final String str : arr) {
            if(!"".equals(str.trim())) {
                strings.add(str);
            }
        }
        return strings.toArray(new String[strings.size()]);
    }