正则表达式在字符串(s)内查找/包围字符串Pattern.matches()== false
我有一个以下json
字符串,我必须过滤以获得所谓的原始语句。正则表达式在字符串(s)内查找/包围字符串Pattern.matches()== false
{ “订阅”:[ “消息”, “句子”, “ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS; \ 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()
使用与^
模式在结束整个模式和$
的beginnen,所以它不会找到任何匹配。
是否有另一种方法获得ANYTEXTWITHANYLENGTHHEREUDNNMBUMBERSDOTS因此Pattern.matches()
返回true?
你可以尝试一下,就立即停止匹配:
[\s\S]*(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)[\s\S]*
[\s\S]*
会匹配前后任何内容,所以整个字符串将会匹配,但只有在内部会有(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)
。
谢谢,正是我在找的东西。也许不是最优雅的解决方案,但它肯定可行:-) – jAC
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模式,它应该工作作为先前
是JSON故意还是错字? – nafas
如果除了期望的字符串之外,您始终确定您的伪'JSON'的其余部分的格式,那么似乎最简单的解决方案可能涉及使用'.split(“/”“)'和/或'.split(“,”)' –