我试图在Perl中掌握正则表达式。任何人都可以提供下列正则表达式匹配和不匹配的任何示例吗?
$sentence =~m/.+\/(.+)/s
答案 0 :(得分:2)
=~
是绑定运算符;它使正则表达式匹配在$sentence
而不是默认$_
上执行。 m
是匹配运算符;当正则表达式由$foo =~ /bar/
字符分隔时,它是可选的(例如/
),但如果要使用不同的分隔符,则需要它。
s
是一个正则表达式标志,使正则表达式中的.
匹配任何字符;默认情况下,.
与换行符不匹配。
实际的正则表达式为.+\/(.+)
;这将匹配一个或多个字符,然后是文字/
字符,然后是一个或多个其他字符。因为初始.+
尽可能地消耗,同时仍然允许正则表达式成功,它将匹配字符串中的最后一个/
,后面至少有一个字符;然后,(.+)
将捕获/
后面的字符,并将其设为$1
。
因此它实质上是捕获文件路径的最终组件。在foo/bar
中,它会捕获bar
,foo/bar/
它将捕获bar/
。仅包含一个组件的字符串(例如/foo
或bar/
或baz
)将不匹配。
答案 1 :(得分:1)
任何字符串,包括多行字符串,在字符串中间的某处包含斜杠字符。
匹配
foo/bar
asdf\nwrqwer/wrqwerqw # /s modifier allows '.' to match newlines
不匹配:
asdfasfdasf # no slash character
/asdfasdf # no characters before the slash
asdfasf/ # no characters after the slash
此外,将捕获字符串中最后一个斜杠后面的整个子字符串,并将其分配给变量$1
。
答案 2 :(得分:0)
故障:
$sentence =~
- 将$sentence
与
m/
- 由
.
- 任何字符
+
- 一次或多次
\/
- 然后是正斜杠
(
- 并保存在$1
捕获组中
.+
- 任何字符一次或多次
)
/s
- 允许.
匹配换行符
有关正则表达式及其选项(如{{=~
和perldoc perlop
等m//
和quote-like operators等运营商的信息,请参阅perldoc perlre
。 1}}。