perl regexp中的~m,s和()

时间:2014-05-07 06:10:14

标签: regex perl

我试图在Perl中掌握正则表达式。任何人都可以提供下列正则表达式匹配和不匹配的任何示例吗?

$sentence =~m/.+\/(.+)/s

3 个答案:

答案 0 :(得分:2)

=~是绑定运算符;它使正则表达式匹配在$sentence而不是默认$_上执行。 m是匹配运算符;当正则表达式由$foo =~ /bar/字符分隔时,它是可选的(例如/),但如果要使用不同的分隔符,则需要它。 s是一个正则表达式标志,使正则表达式中的.匹配任何字符;默认情况下,.与换行符不匹配。

实际的正则表达式为.+\/(.+);这将匹配一个或多个字符,然后是文字/字符,然后是一个或多个其他字符。因为初始.+尽可能地消耗,同时仍然允许正则表达式成功,它将匹配字符串中的最后一个/,后面至少有一个字符;然后,(.+)将捕获/后面的字符,并将其设为$1

因此它实质上是捕获文件路径的最终组件。在foo/bar中,它会捕获barfoo/bar/它将捕获bar/。仅包含一个组件的字符串(例如/foobar/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 perlopm//quote-like operators等运营商的信息,请参阅perldoc perlre。 1}}。