RegEx在字符串中找到/包围的文本Pattern.matches()== false

时间:2015-10-05 13:01:45

标签: java regex pattern-matching

我有一个以下function dpdt = state( t,p, vgth) smooth=1; vg=t; k=10^-1; window1=1-((2*p)-1).^(2*smooth); dpdt=k*(vg+vgth)*window1; 字符串,我必须过滤它以获得所谓的原始句子。

  

{ “订阅”:[ “消息”, “句子”, “ ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS ; \ r \ n \”]}

不允许对global json进行反序列化!

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

string

或(因为它必须在java代码中转义):

regular expression

如果我使用((?<=\{\"subscribe\":\[\"message\",\"sentence\",")(.*)(?=;)) 并在String pattern = "(?<=\\{\"subscribe\":\\[\"message\",\"sentence\",\")(.*)(?=;)"; 语句中进行迭代,则此功能非常有效:

Matcher.find()

不幸的是,整个代码都是由我们的教授给出的。他确实围绕着整个代码:

while

由于while (_regexMatcher.find()) { matches.add(_regexMatcher.group()); //Add to List<String> } 在整个模式的beginnen中使用if (Pattern.matches(pattern, json)) { ... } 模式,在结尾使用Pattern.matches(),因此它不会找到任何匹配项。
还有另一种方法来获取 ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS 以便^返回true吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试:

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

[\s\S]*将匹配之前和之后的所有内容,因此整个字符串将匹配,但仅限于内部有(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

只需添加。*?在你的正则表达式前面。它会不情愿地匹配(与贪婪的*相反),这意味着它会在达到你之前的json模式时停止匹配,这应该像以前一样工作