全球主机交流论坛
标题:
【已解决】大佬们,求个简单匹配正则表达式【感谢大佬】
[打印本页]
作者:
whoareyou
时间:
2024-2-26 11:56
标题:
【已解决】大佬们,求个简单匹配正则表达式【感谢大佬】
本帖最后由 whoareyou 于 2024-2-26 14:18 编辑
【已解决】最后采用了json解析,然后循环判断遍历,各位大佬都说用json解析好,感谢各位大佬
假如有一段文本:
{"result":[{"id":"1111111","ne_id":"aaaaaaaaa","name":"a.com"},{"id":"22222222","ne_id":"bbbbbbbbbb","name":"b.com"},{"id":"33333333","ne_id":"cccccccccc","name":"c.com"}]
要提取【b.com这段中的id字段】,也就是2222222
正则表达式该怎么写,不懂正则表达式,大佬指点下。
自己写的
("id").*(?="name":"b.com")
自己写的这个的问题是:把前面整段也匹配进去了,只想【提取b.com这段中的id字段】
谷歌搜索了下有向前匹配等知识,奈何没学过这方面的,只能来求助了
作者:
teddyzhu15
时间:
2024-2-26 11:57
最佳方案不是解析json 后拿值吗,正则在这儿不是个好方案
作者:
apoloy
时间:
2024-2-26 11:58
有json不用。。。
作者:
apoloy
时间:
2024-2-26 11:59
而且id里面是纯数字为什么不用数字匹配
作者:
mjj天下第一
时间:
2024-2-26 12:12
你可以使用以下的正则表达式来匹配你需要的内容:
"ne_id":"bbbbbbbbbb","name":"b\.com","id":"(.*?)"
复制代码
这个正则表达式会匹配到 "ne_id":"bbbbbbbbbb","name":"b.com","id":" 这段文本,然后使用 (.*?) 来捕获 id 的值。这里的 (.*?) 是一个非贪婪匹配,它会尽可能少的匹配字符。
然而,这个正则表达式假设 id 字段总是在 name 字段之后。如果字段的顺序可能会改变,你可能需要使用一个更复杂的正则表达式,或者使用一个JSON解析器来提取你需要的信息。
注意:在正则表达式中,. 是一个特殊字符,它匹配任何字符(除了换行符)。如果你想匹配一个实际的 . 字符,你需要使用 \. 来转义它。
作者:
buggysoul
时间:
2024-2-26 12:30
本帖最后由 buggysoul 于 2024-2-26 12:43 编辑
安装jq, 用以下bash命令
foo='{"result":[{"id":"1111111","ne_id":"aaaaaaaaa","name":"a.com"},{"id":"22222222","ne_id":"bbbbbbbbbb","name":"b.com"},{"id":"33333333","ne_id":"cccccccccc","name":"c.com"}]}'
echo "$foo" | jq -r '.result[] | select(.name|test("b.com")) | .id'
复制代码
作者:
buggysoul
时间:
2024-2-26 12:42
buggysoul 发表于 2024-2-26 12:30
安装jq, 用以下bash命令
打错了一个单引号,已更正,测试正常。
安装jq,比如debian系统,apt install jq
作者:
winsunz
时间:
2024-2-26 12:44
你可以使用正则表达式的正向预查(positive lookahead)来匹配特定条件之后的内容,而不包括这个条件本身。下面是一个匹配你所需内容的正则表达式:
```
"id":"(\d+)".*(?="name":"b\.com")
```
这个表达式会匹配在 `"name":"b.com"` 之前的 `"id"` 字段,并且只捕获括号内的数字部分。
解释一下:
- `"id":"(\d+)"`: 匹配 `"id":"` 后面跟着一系列数字的部分,并且将这一系列数字作为第一个捕获组。
- `.*`: 匹配任意数量的字符(除了换行符),这样我们可以跳过中间的其他内容。
- `(?="name":"b\.com")`: 这是正向预查,表示在匹配到 `"name":"b.com"` 之前的位置。这个部分不会被包含在匹配结果中。
你可以在你的代码中使用这个正则表达式来提取你需要的内容。
作者:
irony
时间:
2024-2-26 13:01
用jq来处理确实简单,jq也是跨平台的随便用,命令懒得记直接稳gpt就行
作者:
hanada
时间:
2024-2-26 13:14
不要用正则处理json,不然你会死得很惨
作者:
Twitter
时间:
2024-2-26 13:26
本帖最后由 Twitter 于 2024-2-26 13:29 编辑
正则表达式:\{"id":"(\d+)","ne_id":"([^"]*?)","name":"b\.com"\}
如匹配结果赋值数组$matches,则$matches[1] 是id字段值,$matches[2] 是ne_id字段值。
作者:
Typeboom
时间:
2024-2-26 13:37
为啥不解析之后直接拿
作者:
Prk
时间:
2024-2-26 13:47
为什么你不能 JSON decode 呢?
然后循环遍历对象,如果 name = b.com 就拿 ID 然后跳出循环
欢迎光临 全球主机交流论坛 (https://fd.vvwvv.eu.org/)
Powered by Discuz! X3.4