我有使用正则表达式首先匹配的字符串的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。我需要用正则表达式解决它而不是红宝石编码。
答案 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组中捕获。
...