Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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,请帮助开发正则表达式。我的要求是验证以下字符串 String="asdasd|adajjsd|asas,asdas|asda|sd"; 模式id[String]separatedByPipe[String]separatedByPipe[String] 例如:String=“asdasd | adajjsd | asas” 如果有多个字符串,则重复上述模式,并用逗号分隔 例如:String=“asdasd | adajjsd | asas,asdas | asda | sd” 我可以假设该模式

请帮助开发正则表达式。我的要求是验证以下字符串

String="asdasd|adajjsd|asas,asdas|asda|sd";
模式id[String]separatedByPipe[String]separatedByPipe[String]

例如:
String=“asdasd | adajjsd | asas”

如果有多个字符串,则重复上述模式,并用逗号分隔 例如:
String=“asdasd | adajjsd | asas,asdas | asda | sd”

我可以假设该模式最多只重复3次,即在我的字符串中最多重复2个逗号

附加了我的测试类

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestReg {

public static void main(String[] args) {

    //String regex = "[a-z]+\\|[a-z]+,[a-z]+\\|[a-z]*";
    String regex = "([a-z]\\|[a-z]\\|[a-z]\\,?)+";
    //String regex = "[a-z]+\\|re{ 1}[a-z]+\\|re{ 1}[a-z]+[a-z]+\\|[a-z]+\\|[a-z]*";
    //String regex = "[a-z](|)[a-z](,)[a-z](|)[a-z]";
    //String pattern="([a-z]+@)([a-z]+)(\\.[a-z]+)"; 
    //String inputString1 = "shdifhsdui-asdasd,shdifhsdui|abc";


    //String inputString1 = "";//failed
    String inputString1 = "asdasd|adajjsd|asas,asdas|asda|sd";//success
    //String inputString1 = "asdasd|adasd-asdas|asdasd";//success
    //String inputString1 = "asdasd|adasd|asassa,asdas|asdasd";//failed
    Pattern pattern1 = Pattern.compile(regex);
    Matcher matcher1 = pattern1.matcher(inputString1);
    boolean result = matcher1.find();          
    System.out.println(result);
}
}

大家好

System.out.println ("asdasd|adajjsd|asa,s|sad|sdas,asd|as|as|da".matches ("([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+"));

工作很有魅力。那么,为什么我的上一节课没有同样的效果呢。请提供帮助。我正在使用jdk1.5

此java正则表达式将符合您的要求:

"[a-z]+(\\|[a-z]+){2}(,[a-z]+(\\|[a-z]+){2})*"
这将验证输入,但要提取零件,我只需在逗号上使用
split()
,然后对于管道上的每个零件拆分:

for (String group : input.split(",")) {
    String[] parts = group.split("\\|");
    // do something with the parts
}

获取数据只需两行代码。

将字符串regex更改为

String regex = "([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+";
然后试试看

    String inputString1 = "asdasd|adajjsd|asas,asdas|asda|sd";
    String regex = "([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+";
    Pattern pattern1 = Pattern.compile(regex);
    Matcher matcher1 = pattern1.matcher(inputString1);
    boolean result = matcher1.find();          

    System.out.println(inputString1.substring(matcher1.regionStart(), matcher1.regionEnd()));

您可以使用此正则表达式对其进行验证

^(?!.*,$)[a-z]+(\\|[a-z]+,?)*$

上拆分,然后在
|

String[] terms = string.split(",");
for (String term : terms) {
    String[] parts = term.split("\\|");
}

如果您想将整个静态字符串作为一个字符串进行测试,那么这个正则表达式模式将帮助您。。但是,如果要测试由“|”分隔的不同字符串,则需要采用其他正则表达式模式


String regex=“([a-z]{6}\|[a-z]{7}\|[a-z]{4}\,[a-z]{5}\|[a-z]{2}?+”

如果这有帮助,请尝试:

String regex = "[a-z]*\\|*,*[a-z]*";

其余的代码不需要更改。

您不需要反斜杠转义a
,因为它在regex中没有特殊意义。hi下面的字符串将失败。String inputString1=“asdasd | adajjsd | asas,asdas | asda | sd |”;我在最后添加了一个额外的管道。我无法使用拆分方法。如果使用“.matches()”方法,您的答案是正确的。我已编辑了问题。请看一看。matcher()和matches(),提供不同的输出。我可以让split开始工作,但在您的示例中,您是否希望结尾有一个空白字段?您好,下面的字符串失败。String inputString1=“asdasd | adajjsd | asas,asdas | asda | sd |”;我在最后添加了一个额外的管道。嗨,这是失败的以下字符串。String inputString1=“asdasd | adajjsd | asas,asdas | asda | sd |”;我在最后添加了一个额外的管道。我编辑了问题。请看一看。matcher()和matches(),提供不同的输出。字符串inputString1=“asdasd | adajjsd | asas,asdas | asda | sd |”失败,请尝试此字符串regex=“[a-z]*\\\\\\\*,[a-z]*\\\\\\\\\\\”;。另外,请从您的需求角度指定可能的组合。我同意阿尼鲁德的观点。我已经编辑了这个问题。请看一看。matcher()和matches(),给出不同的输出。您试图在代码中匹配的模式是:一个字符|一个字符|一个字符,一个字符|一个字符|当您在[a-z]后面加*时,一个字符它与0个或多个字符匹配,因此当您使用字符串匹配时,它可以工作class@SujeeshSValath你应该在你的问题中指定所有有效和无效的组合。否则没有人能帮助你。我已经编辑了这个问题。请看一看。matcher()和matches(),给出不同的输出。我已经编辑了这个问题。请看一看。matcher()和matches(),提供不同的输出。