the regex expression is as below:
if ($ftxt =~ m|/([^=]+)="(.+)"|o)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
这个正则表达式似乎与许多其他正则表达式不同.让我困惑的是"|" ,大多数正则表达式使用"/"而不是"|".而且,group([^ =] +)也让我感到困惑.我知道[^ =]的意思是"字符串的开头"或"=",但是重复'^'一次或多次是什么意思?,怎么解释这个?
您可以使用不同的分隔符代替/.例如,您可以使用:
m#/([^=]+)="(.+)"#o
Run Code Online (Sandbox Code Playgroud)
要么
m~/([^=]+)="(.+)"~o
Run Code Online (Sandbox Code Playgroud)
使用不同的东西的优点/是你不必逃避斜线,因为否则,你必须使用:
m/\/([^=]+)="(.+)"/o
^
Run Code Online (Sandbox Code Playgroud)
[或[/]]
([^=]+)是一个捕获组,在里面,你有[^=]+.[^=]是一个否定的类,将匹配任何不是a的字符=.
^在字符类的开头表现不同,并且与字符类^外部的行为不同,这意味着"行首".
至于最后一部分o,这是一个我到目前为止还没有遇到过的旗帜,所以有一点点搜索带我到这篇文章,我引用:
该
/o修改是在perlop中的文件,而不是perlre文档,因为它是一个报价般的修饰,而不是一个正则表达式修改.这对我来说似乎总是很奇怪,但事实就是如此.在Perl 5.6之前,即使变量没有改变,Perl也会重新编译正则表达式.你不需要那样做了.
/o尽管对变量进行了进一步的更改,您可以使用一次编译正则表达式,但正如其他答案所指出的那样,qr//更好.