0

我有一个这样的字符串......

"test_test_test":"Hello \"Hello\" Hello","Oh_yea_oh_yea","Hi there buddy"

我想抢

"test_test_test":"Hello \"Hello\" Hello"

到目前为止,我的正则表达式是这个......

"test_test_test":

这将抓住钥匙和冒号。我将永远知道是什么"test_test_test",我只是不知道冒号后面的值是什么。如果我知道引文本身内部不会有转义的引文,那就很容易了,但确实有。谢谢!

编辑:

里面可以有逗号,里面不能有没有转义的引号。

我的想法是...

"test_test_test":"[^(",)]*

在我的脑海中,这表示继续,直到找到单引号后跟逗号,(“,)然后停止。但是上面不起作用。

4

2 回答 2

1

这是 RAW 正则表达式。如果您放入字符串或包含分隔符,您可能需要添加更多转义。

"test_test_test":"(?:[^"\\]|\\[\\"])*"

如果您需要灵活的间距:

"test_test_test" *: *"(?:[^"\\]|\\[\\"])*"

关键部分在这里:(?:[^"\\]|\\[\\"])*. 它将匹配 0 个或多个:非引号或反斜杠,或转义引号\"或转义反斜杠\\

上面的正则表达式仍然不精确:引用字符串中的内容允许跨越多行。好不好取决于引用字符串的语法。但是,我见过的语言中的多行引号字符串通常不会采用我的正则表达式中描述的形式。

正则表达式还将引用的字符串"\n"视为无效。不过,您可以轻松修改正则表达式以适应这些情况。

于 2013-02-07T05:23:49.823 回答
0

如果我理解正确,您想选择逗号前的键和第一个条目。

更新:

无论其内容如何,​​您实际上都想要第一个引用的字符串。

所以你的正则表达式可能看起来像这样:/"test_test_test".*?"(?:[^"\\])*"/

更新 2:

此正则表达式不会因字符串内的转义而窒息:"test_test_test".*?".*[^\\"].*?"(?=,)

于 2013-02-07T05:16:22.977 回答