[英]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.