正则是在URL中的已知路径之后在路径上匹配的

  • 本文关键字:路径 之后 URL regex perl
  • 更新时间 :
  • 英文 :


我正在尝试获得一个perl tregex,以使我git url中某个路径出现的路径:

url要测试:

http://example.org/project/branches/new-feature
http://example.org/project/branches/new-feature/src

给定上述两个URL,我想捕获"新功能"。使用下面的Perl Regex,我可以使用第二个URL,但不能使用第一个URL。

echo $url | perl -pe 's|^.*/branches/(.*?)/.*$|1|'

问题是在"新功能"之后的斜杠,可能存在也可能不存在。

您可以使/.*可选。使用

perl -pe 's|^.*/branches/([^/]*)(?:/.*)?$|$1|'

sed 's|^.*/branches/([^/]*)(/.*)?$|1|'

或者如果您负担得起gnu grep

grep -oP '/branches/K[^/]+'

(?:/.*)?零件与/的1或0发生匹配,然后使用除线断裂字符以外的任何0 字符。sed解决方案是相同的,只有Metacharacter被逃脱了,因为它是BRE POSIX符合的模式。在grep解决方案中,/branches/K/branches/匹配,然后丢弃该值,返回的唯一文本是与[^/]+匹配的文本(一个或多个CHAS /以外的一个或更多字符(。

请参阅在线演示

尝试以下:

perl -pe 's|.*?/branches/([^/]+).*|$1|'

注意

  • $1不类似sed 1
  • [^/]+表示:除/以外的所有字符,而+至少是一种情况

另一个解决方案:

perl -lne 'print $& if m|/branches/K[^/]+|'

for pcre php下面的代码对我来说很好。

/branches/(. )//

实时演示https://regex101.com/r/5m2uqe/1

最新更新