我正在尝试获得一个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
不类似sed1
-
[^/]+
表示:除/
以外的所有字符,而+
至少是一种情况
另一个解决方案:
perl -lne 'print $& if m|/branches/K[^/]+|'
for pcre php下面的代码对我来说很好。
/branches/(. )//
实时演示https://regex101.com/r/5m2uqe/1