匹配字符串中的不同模式

时间:2018-10-16 08:26:11

标签: regex

我想从初始字符串中删除所有捕获的元素。例如,给定字符串

https://item.taobao.com/item.htm?spm=a230r.1.999.1.11cf523cXZ0Yh3&id=564725808226&ns=1#detail

我想要以下

item.taobao.com/item.html?id=564725808226

我有以下正则表达式(https:\/\/)|(spm=.*&(?=id))|(&ns=.*),其行为如下:http://rubular.com/r/hp6xgB6pJ4

Match 1
1.  https://
2.   
3.   
Match 2
1.   
2.  spm=a230r.1.999.1.11cf523cXZ0Yh3&
3.   
Match 3
1.   
2.   
3.  &ns=1#detail

问题是,我对它并不真正满意,因为如您所见,它产生三个一组,三个一组,其中的一些字段为空,并且对每个匹配组执行字符串操作并不方便

有没有一种方法可以将所有“匹配项”聚集到一组匹配项中,因此输出看起来就像

Match1
1. https://
2. spm=a230r.1.999.1.11cf523cXZ0Yh3&
3. &ns=1#detail

2 个答案:

答案 0 :(得分:0)

正如评论所告诉您的,您已经可以用空字符串替换不需要的内容,但是如果您想根据需要减少匹配次数,可以使用: (https:\/\/).*?(spm=.*?&(?=id)).*?(&ns=.*)。然后只需替换组即可。选中http://rubular.com/r/mysRxjeiin

您的群组将是:

1.  https://
2.  spm=a230r.1.999.1.11cf523cXZ0Yh3&
3.  &ns=1#detail

答案 1 :(得分:0)

我有以下

https:\/\/([\w\W.]+\/[\w\W.]+[?]).*(id=\d+)

尽管如此,您必须手动组合第1组和第2组比赛

Full match  0-81    `https://item.taobao.com/item.htm?spm=a230r.1.999.1.11cf523cXZ0Yh3&id=564725808226`
Group 1.    8-33    `item.taobao.com/item.htm?`
Group 2.    65-81   `id=564725808226`