zjq_1314520
十木禾
2018-05-03 03:19
采纳率: 66.7%
浏览 1.0k

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

如下的字符串

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条回答 默认 最新

  • caozhy
    已采纳

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

    点赞 评论
  • congyeyan9940
    笨笨的程序员啊 2018-05-03 03:40

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

    点赞 评论
  • oyljerry
    oyljerry 2018-05-03 06:28

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

    点赞 评论
  • u010740438
    59套餐 2018-05-03 06:30

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

    点赞 评论
  • ApatheCrazyFan
    ApacheCrazyFan 2018-05-03 07:24

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

    点赞 评论
  • weixin_40768609
    weixin_40768609 2018-05-03 07:26
    点赞 评论
  • zjq_1314520
    十木禾 2018-05-03 11:57
         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;
        }
    
    点赞 评论

相关推荐