java - 正则表达式查找字符串内/周围的文本 | Pattern.matches() == false

标签 java regex pattern-matching

我有一个以下 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/

相关文章:

java - Java 中的嘈杂字符串匹配?

java - 调用命令行程序的Web应用程序框架

java - 通过 Facebook 分享时出错

java - 无需大写的 IntelliJ IDEA 12 代码完成

regex - 匹配包含 *N* 次特定字母的单词

java - Pig脚本/命令来过滤多个字符串上的文件

java - 单指令双重赋值

javascript - 为什么这个 JavaScript 正则表达式会在浏览器中崩溃?

regex - 从文本文件中的重复范围模式中获取特定行

f# - 简化表达式 F#