我有一个以下 json
字符串,我必须对其进行过滤才能获得所谓的原始句子。
{"subscribe":["message","sentence","ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS;\r\n\"]}
不允许反序列化json
string
!
我确实使用以下正则表达式
过滤了搜索到的文本:
((?<=\{\"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",")(.*)(?=;)
里面。
关于java - 正则表达式查找字符串内/周围的文本 | Pattern.matches() == false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949340/