正则表达式模式可在双引号内的关键参数中捕获值

时间:2018-12-12 06:56:34

标签: regex

我要捕获以下字符串中的BBKH2-0272-2BBH@51234(捕获值,其中键为 ssidname SSIDName )。

{"SSIDIndex":2,"SSIDName":"BBKH2-0272-2" ,"Band":"2.4GHz","Status":"RadioIndex":1,"SSIDIndex":3,"SSIDName":"BBH@5","ssidname":"1234", "ssid_name":"MKLM-098", ssidname=ppoin }

我正在使用此正则表达式:

  

(?<=(?i)(“ SSIDName”:“))(\ w {1,8})

但是它不起作用。预先感谢。

5 个答案:

答案 0 :(得分:1)

您不需要后面看,可以使用此正则表达式捕获第1组

(?i)"SSIDName":"([^"]+)"

基本上,您希望捕获键属性SSIDName的所有值,并且不区分大小写,因为其中一个键是小写字母。

Live Demo

您的正则表达式(?<=(?i)("SSIDName":"))(\w{1,8})很好,但是在捕获BBH@5时会阻塞,因为您正试图使用​​\w捕获它,而@不是{{1}的一部分}。如果您将正则表达式更改为此,

\w

然后,即使您的正则表达式也可以捕获您所需的内容。

Demo for your modified regex

但是,一般来说,您应尽量使正则表达式保持简单,并避免环视,因为并非所有语言和工具都支持环视,并且正则表达式可用于大多数语言/工具。

答案 1 :(得分:1)

使用以下非贪婪方法:

(?i)(?:"ssidname":")(.*?)"

我要做的就是寻找字符串"ssidname":"并捕获值(不带引号),直到遇到结束引号为止。

Demo

答案 2 :(得分:1)

也尝试一下。

 (?<=(?i)("SSIDName":"))([a-zA-z0-9-@]+)

答案 3 :(得分:1)

我不知道您为什么一直使用如此困难的正则表达式

这可以通过使用

来完成

regex:/ ^“ SSIDName”:“(。*?)” / gmi

g-全局检查,即在第一场比赛后不返回。

m-从行首到行尾匹配。多行。

i-不区分大小写的匹配。

选中Demo here

答案 4 :(得分:0)

您还可以尝试以下正则表达式(非常接近您的正则表达式):

(?i)(?<="SSIDName":")[^"]+(?=")

带有字符串:

{"SSIDIndex":2,"SSIDName":"BBKH2-0272-2" ,"Band":"2.4GHz","Status":"RadioIndex":1,"SSIDIndex":3,"SSIDName":"BBH@5","ssidname":"1234" }

它只会选择:

BBKH2-0272-2
BBH@5
1234

https://regex101.com/r/3Teuiq/1/

所示