ruby regexp跳过零长度匹配和零匹配

时间:2016-01-12 09:07:12

标签: ruby regex

我有使用正则表达式首先匹配的字符串的ruby应用程序。 my_url.match(/my_regex/).first 作为一个字符串,我有一个包含地址或邮政编码的网址列表,并且每个网址都需要使用正则表达式提取邮政编码或广告 网址样本:

http://www.adresses.co.uk/avon/bath-city
http://www.adresses.co.uk/postcode/rm107jj

我的正则表达式:

\.co\.uk\/postcode\/([^\/]*)|\.co\.uk\/(?!postcode)([^\/]*\/[^\/]*)

我的问题是,对于非邮政编码网址,此正则表达式的第一个匹配数据为nil see_on_rubular 如何重写或更改此反射,以便它将跳过零匹配或首先匹配非nils。我需要用正则表达式解决它而不是红宝石编码。

1 个答案:

答案 0 :(得分:0)

这是一个正则表达式,它会在{1}}之后的所有内容中捕获所有内容,如果它存在,或者postcode/之后的所有内容:

.co.uk/

DEMO

请注意,如果邮政编码链接末尾有不需要的路径元素,则会产生意外结果,例如:

\.co\.uk\/(?:postcode\/)?([^\/\n]+(?:\/[^\/\n]+)?)

更新:根据评论,您似乎只想匹配 last 路径元素。但我们不能简单地捕获第二个元素,因为可能只有一个:

http://www.adresses.co.uk/postcode/rm107jj/oops

然而,我们可以使第一个元素成为可选:

http://www.adresses.co.uk/west-midlands

请注意我如何使用非捕获组作为可选部分,因此您想要的部分仍然在第1组中捕获。

...