Java JSON格式内的字符串匹配
我使用一个简单的regexp匹配器来匹配wikidump中的一段JSON文本。JSON在XML中。我已经在字符串Java JSON格式内的字符串匹配,java,regex,json,Java,Regex,Json,我使用一个简单的regexp匹配器来匹配wikidump中的一段JSON文本。JSON在XML中。我已经在字符串str中检索了XML标记的内容。 代码是 str.matches(".*"m":["value",569,"time",\\{"time":"+00000001952-03-11.*") (我在这里给出标签中的确切格式) {
str
中检索了XML标记
的内容。
代码是
str.matches(".*"m":["value",569,"time",\\{"time":"+00000001952-03-11.*")
(我在这里给出标签
中的确切格式)
{
有问题,所以我加入了\{
,但仍然无法工作。我并不真的为那里的{
感到烦恼,但我不知道如何摆脱它
错误是:
java.util.regex.PatternSyntaxException:附近的非法字符范围
索引94
“m”:[“值”,569,“时间”,“时间”:“+0000000 1952-03-11。
^位于java.util.regex.Pattern.error(Pattern.java:1924)
java.util.regex.Pattern.range(Pattern.java:2594)位于
java.util.regex.Pattern.clazz(Pattern.java:2507)位于
sequence(Pattern.java:2030)位于
java.util.regex.Pattern.expr(Pattern.java:1964)位于
编译(Pattern.java:1665)
Pattern.(Pattern.java:1337)位于
compile(Pattern.java:1022)位于
Pattern.matches(Pattern.java:1128)位于
java.lang.String.matches(String.java:2063)位于
testProjectone.birthDate.testbirthDate(birthDate.java:64)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:47)
在
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
在
org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:44)
在
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
在
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)位于
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)位于
org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)位于
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)位于
org.junit.runners.ParentRunner.run(ParentRunner.java:309)位于
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
在
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
你提到的方法调用
str.matches(“.m”):[“值”,569,“时间”,“时间”:“+00000001952-03-11。”
是一个问题。方法参数中双引号内的双引号是一个问题。您需要转义
[
,因为它将被引擎解释为字符类的开始
您需要转义的另一件事是+
中的+
,因为+
被解释为重复上一个字符(即;
)一次或多次
".*"m":\\["value",569,"time",\\{"time":"\\+00000001952-03-11.*"
当您想要找到一个固定的长字符串时,构造正则表达式的一种简单方法是使用:
*
之间的文本部分都将被视为文字字符。您能给出一个您尝试匹配的示例字符串吗?我尝试匹配的唯一字符串是:“m”:[“value”,569,“time”\\{";time";:";+00000001952-03-11,它在和之间没有空格。字符串中实际上有一个“quot”字。但是它被显示为“当我沿着wid给它时”,字符串中实际上有一个“quot”字。但是它被显示为“当我沿着wid给它时”。它就像“m”一样:[“值”,569,“时间”,时间:“+00000001952-03-11
".*" + Pattern.quote(""m":["value",569,"time",{"time":"+00000001952-03-11") + ".*"