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

  • threenewbee 2018-05-03 06:34
    已采纳

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

    打赏 评论
  • 笨笨的程序员啊 2018-05-03 03:40

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

    打赏 评论
  • oyljerry 2018-05-03 06:28

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

    打赏 评论
  • 59套餐 2018-05-03 06:30

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

    打赏 评论
  • ApacheCrazyFan 2018-05-03 07:24

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

    打赏 评论
  • weixin_40768609 2018-05-03 07:26
    打赏 评论
  • 十木禾 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;
        }
    
    打赏 评论

相关推荐 更多相似问题