正则表达式匹配字符串问题

如下的字符串

Grance T\"om "Bob Steave" Lindy "Su San" "Tom's Feare" "Array\" Creater\""

现在求一正则表达式能匹配出

Grance
T"om
Bob Steave
Lindy
Su San
Tom's Feare
Array" Creater"

就是说能匹配上没一段话中的所有的子字符串
子字符串包括 Grance 这样的单词
用( "" )包裹起来的字符串 "Bob Steave"
包含转义符的字符串 T"om
用( "" ) 包裹并包含转义符的字符串 Array" Creater"

7个回答

单一的正则表达式不行,需要两个,第一个将你的引号分割的内容替换成 | 分割的,得到一个新的正则表达式
第二次用这个正则表达式和下面哪个比较。

zjq_1314520
片刻清夏 回复showbo: 采纳了~
2 年多之前 回复
zjq_1314520
片刻清夏 回复showbo: 还是编译大法好~
2 年多之前 回复
zjq_1314520
片刻清夏 `
2 年多之前 回复
zjq_1314520
片刻清夏 回复showbo:你倒是给了我一个思路,我词法分析看看
2 年多之前 回复
showbo
支付宝加好友偷能量挖,胡杨在等着我的召唤 正则不好搞,这种和语法分析差不多了,嵌套了引号的
2 年多之前 回复

楼主表述不是很清晰啊 可以把能变的部分用*或者× 表示整个你要的字符串

zjq_1314520
片刻清夏 *** "*** ***" ***\"*** "***\"*** **" 中找出 ***;*** ***;***"***;***"*** **;
2 年多之前 回复

一个简单的方法,就是把引号中间的空格用其他字符比如#等替换,然后用空格做split分割得到数组,再把#用空格替换回来

zjq_1314520
片刻清夏 好像也可以欸~我试试看
2 年多之前 回复

用*或者× 表示整个字符串

zjq_1314520
片刻清夏 *** "*** ***" ***\"*** "***\"*** **" 中找出 ***;*** ***;***"***;***"*** **;
2 年多之前 回复

将道理我连 var s = 后面的都不会写,是 \" 还是 \"

zjq_1314520
片刻清夏 \" 就是一个转义,这个的意图就是将一行内容中的 单词 或者双引号""包含的单词找出来
2 年多之前 回复
ApatheCrazyFan
ApacheCrazyFan 是 \\" 还是 \"
2 年多之前 回复
ApatheCrazyFan
ApacheCrazyFan \\\\" 还是
2 年多之前 回复
     public static List getContentArray(String content){

        List<String> contentList = new ArrayList<String>();
        String contentItem="";
        boolean hasQuote = false;

        for(int  i = 0; i<content.length() ;i++){
            char item = content.charAt(i);
            if(item == '"'){
                if(hasQuote){           // 如果当前引号前面有引号
                    hasQuote = false;
                    if(!contentItem.equals("")){
                        contentList.add(contentItem);
                        contentItem = "";
                    }
                }else{
                    hasQuote = true;
                }
            }else if(item == '\\'){
                i++;
                contentItem += content.charAt(i);
            }else if(item == ' '){
                if(hasQuote){
                    contentItem += item;
                }else{
                    if(!contentItem.equals("")){
                        contentList.add(contentItem);
                        contentItem = "";
                    }
                }
            }else{
                contentItem += item;
            }
        }
        return contentList;
    }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问