繁体   English   中英

正则表达式查找字符串中/周围的文本| Pattern.matches()==否

[英]RegEx find text within / surrounded by string(s) | Pattern.matches() == false

我有以下json字符串,我必须对其进行过滤以获取所谓的原始句子。

{“ subscribe”:[“ message”,“ sentence”,“ 任何文本长度不限NUMBERSDOTS ; \\ r \\ n \\”]}

不允许对json string反序列化!

我确实使用以下regular expression过滤了搜索到的文本:

((?<=\{\"subscribe\":\[\"message\",\"sentence\",")(.*)(?=;))

或(因为必须在Java代码中对其进行转义):

String pattern = "(?<=\\{\"subscribe\":\\[\"message\",\"sentence\",\")(.*)(?=;)";

如果我使用Matcher.find()并在while语句中进行迭代,则此方法可以完美地工作:

while (_regexMatcher.find()) {
    matches.add(_regexMatcher.group()); //Add to List<String>
}

不幸的是,整个代码是由我们的教授给出的。 他确实将整个代码包含在以下内容中:

if (Pattern.matches(pattern, json)) {
     ... 
}

由于Pattern.matches()在整个模式的开头使用^且在结尾使用$模式,因此找不到任何匹配项。
还有另一种方法来获取ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS,以便Pattern.matches()返回true吗?

您可以尝试:

[\s\S]*(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)[\s\S]*

[\\s\\S]*之前和之后的任何内容都将匹配,因此整个字符串将被匹配,但前提是必须存在(?<=\\{"subscribe":\\["message","sentence",")(.*)(?=;)内部。

while (in_file.hasNextLine()) 
    {
        one_line = in_file.nextLine();

        tokens = one_line.split("\\P{Alpha}+");
        for (i = 0; i < tokens.length; i++) 
        {
            //do whatever;
        }

更多详细信息,请参见http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

只需添加。*? 在您的正则表达式前面 它会勉强匹配(通过与贪婪的。*相对),这意味着它将在到达您之前的json模式后立即停止匹配,该模式应能像以前一样工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM