请教一个简单的正则提取问题

2018-03-06 15:39:27 +08:00
 cnqncom
$re = '/"body":"(1+)",/';
$str = '{"returnCode":"0","resultCode":"0","sign":"19333CD7F9710A104DA5D815709697D2","outChannelNo":"2017120100401000000017","status":"02","mchId":"000000010000000002","channel":"wxPubQR","body":"收单支付","outTradeNo":"20171201150337579753","amount":0.01,"transTime":"20171201150337"}';
preg_match_all($re, $str, $matches);

不仅需要提取 body,还要把 transTime 也提取出来。规则怎么写?
3073 次点击
所在节点    PHP
15 条回复
cnqncom
2018-03-06 15:39:54 +08:00
$re = '/"Title":"([^"]+)",/';
Telegram
2018-03-06 15:53:57 +08:00
标准 json,你为啥要用正则
cnqncom
2018-03-06 16:10:27 +08:00
@Telegram 只想提取里面的这两个值
shifangjumie
2018-03-06 16:32:26 +08:00
json_decode 之后取不出来么?
zhuzhuyule
2018-03-06 16:46:47 +08:00
一次匹配:
```
reg1=/,\s*"body":"([^"]*)"[\w\W]*?,\s*"transTime":"([^"]*)"/
```

循环匹配:
```
reg2=/,\s*"(body|transTime)":"([^"]*)"/g
```
symeonchen
2018-03-06 16:58:33 +08:00
简单版本:
```
"body":"[^"]+"
```

```
"transTime":"[\w]+"
```
正则不见得快多少,用 Json 解析更方便
MuscleOf2016
2018-03-06 17:00:25 +08:00
推荐一个网站,妈妈再也不用怕我写正则了。
http://www.txt2re.com/index-javascript.php3?s={%22returnCode%22:%220%22,%22resultCode%22:%220%22,%22sign%22:%2219333CD7F9710A104DA5D815709697D2%22,%22outChannelNo%22:%222017120100401000000017%22,%22status%22:%2202%22,%22mchId%22:%22000000010000000002%22,%22channel%22:%22wxPubQR%22,%22body%22:%22%26%2325910;%26%2321333;%26%2325903;%26%2320184;%22,%22outTradeNo%22:%2220171201150337579753%22,%22amount%22:0.01,%22transTime%22:%2220171201150337%22}&6
VgV
2018-03-06 18:48:45 +08:00
直接用 json_decode 就可以了呗,像调用数组那样。
你不会写正则也许还会匹配错,但你直接用 json_decode 函数解出来再用数组调用就准确多了,
除非你提供的字符串不是 json
$arr = json_decode(字符串,true);
print_r($arr);
br00k
2018-03-06 23:47:30 +08:00
正常路不走,非要走野路子。😂
mingyun
2018-03-06 23:49:53 +08:00
fox0001
2018-03-07 05:40:24 +08:00
既然是标准 JSON 字符串,还是解析 JSON 方便,正则表达式提取要考虑格式变换(例如双引号变成单引号,空格增多或减少)的情况
toxicant
2018-03-07 10:46:07 +08:00
对啊... json_decode 1 分钟能找到的东西 用正则还得去 v2 问。
scriptB0y
2018-03-07 11:24:04 +08:00
用 json 库解析未必比 re 慢啊
ericgui
2018-03-07 11:41:35 +08:00
理解不了为什么不用 json 解析。实在理解不了。
crane2018
2018-03-07 14:30:08 +08:00
美特斯邦威:不走寻常路😆

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/435368

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX