正则表达式:未找到匹配项

时间:2014-10-15 08:30:59

标签: java regex

我刚开始学习正则表达式。我想在" mytag"中获取属性值。标签并使用以下代码,但它给了我找不到匹配的异常。

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

public class dummy {

    public static void testRegEx()
    {
    //  String pattern_termName = "(?i)\\[.*\\]()\\[.*\\]";

        Pattern patternTag;
        Matcher matcherTag;

        String mypattern= "\\[mytag attr1="(.*?)" attr2="(.*?)" attr3="(.*?)"](.+?)\\[/mytag]";

        String term="[mytag attr1=\"20258044753052856\" attr2=\"A security \" attr3=\"cvvc\" ]TagTitle[/mytag]";


        patternTag = Pattern.compile(mypattern);

        matcherTag = patternTag.matcher(term);

        System.out.println(matcherTag.group(1)+"*********"+matcherTag.group(2)+"$$$$$$$$$$$$");
    }

    public static void main(String args[])
    {
        testRegEx();    
    }

}

我使用\"代替",但它仍然显示了同样的异常。

2 个答案:

答案 0 :(得分:1)

您忘记检查匹配查找功能的匹配器对象,还需要使用\"  而不是" ,. find方法扫描输入序列,查找与模式匹配的下一个子序列。

Pattern patternTag;
Matcher matcherTag;
String mypattern= "\\[mytag attr1=\"(.*?)\" attr2=\"(.*?)\" attr3=\"(.*?)\"\\s*](.+?)\\[/mytag]";
String term="[mytag attr1=\"20258044753052856\" attr2=\"A security \" attr3=\"cvvc\" ]TagTitle[/mytag]";
patternTag = Pattern.compile(mypattern);
matcherTag = patternTag.matcher(term);
while(matcherTag.find()){
       System.out.println(matcherTag.group(1)+"*********"+matcherTag.group(2)+"$$$$$$$$$$$$");
}

<强>输出:

20258044753052856*********A security $$$$$$$$$$$$

DEMO

答案 1 :(得分:0)

\\s+\\s*缺少

代码:

final String  pattern = "\\[\\s*mytag\\s+attr1\\s*=\\s*\"(.*?)\"\\s+attr2\\s*=\\s*\"(.*?)\"\\s+attr3\\s*=\\s*\"(.*?)\"\\s*\\](.+?)\\[/mytag\\]";
final String  input   = "[mytag attr1=\"20258044753052856\" attr2=\"A security \" attr3=\"cvvc\" ]TagTitle[/mytag]";
final Pattern p = Pattern.compile( pattern );
final Matcher m = p.matcher( input );
if( m.matches()) {
   System.out.println(
      m.group(1) + '\t' + m.group(2) + '\t' + m.group(3) + '\t' + m.group(4));
}

outpout:

20258044753052856   A security  cvvc    TagTitle