![]() |
1
6
可以将regex拆分为字符串或regex文本。所以把它作为双引号字符串传递是可以的。 还可以使用标准/regex以外的字符分隔正则表达式文本/ |
![]() |
2
6
斜杠只是正则表达式的标准分隔符(您可以使用其他分隔符),它们像双引号一样计算特殊字符和转义序列。 编辑 :我射得太快了,正如曼尼在评论中解释的那样。我将尝试更详细的解释:
通常,Perl中匹配的regex从m开始,然后regex主体被包含在一些分隔符中。匹配regex的标准分隔符是斜杠,可以省略前导
这些都是一样的,它们被称为“regex文本”。如果使用单引号,则转义序列不会得到评估。
在这一点上,您的第一次尝试似乎很奇怪,使用双引号中的regex,但没有前导
|
![]() |
3
5
是的,split始终采用regex(包含单个空格的特殊情况除外)。如果给它一个字符串,它将被用作regex。同样的事情也发生在=~(例如$foo=~“pattern”)。并且regex元字符将被视为这样,而不管使用//。 这就是为什么总是使用//是一个好主意,强调它有时不是一个字面字符串,有时不是一个regex,这样你就不会在某一天意外地尝试拆分(“”、“A_B_C”)。 |
![]() |
4
1
让我们看看几个备选方案的基准。
Benchmark: running "", //, m"", m//, qq//, qr//, $qq , $qr , $str for at least 5 CPU seconds... "": 6 wallclock secs ( 5.21 usr + 0.02 sys = 5.23 CPU) @ 42325.81/s (n=221364) //: 6 wallclock secs ( 5.26 usr + 0.00 sys = 5.26 CPU) @ 42626.24/s (n=224214) m"": 6 wallclock secs ( 5.30 usr + 0.01 sys = 5.31 CPU) @ 42519.96/s (n=225781) m//: 6 wallclock secs ( 5.20 usr + 0.00 sys = 5.20 CPU) @ 42568.08/s (n=221354) qq//: 6 wallclock secs ( 5.24 usr + 0.01 sys = 5.25 CPU) @ 42707.43/s (n=224214) qr//: 6 wallclock secs ( 5.11 usr + 0.03 sys = 5.14 CPU) @ 33277.04/s (n=171044) $qq : 5 wallclock secs ( 5.15 usr + 0.00 sys = 5.15 CPU) @ 42154.76/s (n=217097) $qr : 4 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 39593.94/s (n=209056) $str : 6 wallclock secs ( 5.29 usr + 0.00 sys = 5.29 CPU) @ 41843.86/s (n=221354) Rate qr// $qr $str $qq "" m"" m// // qq// qr// 33277/s -- -16% -20% -21% -21% -22% -22% -22% -22% $qr 39594/s 19% -- -5% -6% -6% -7% -7% -7% -7% $str 41844/s 26% 6% -- -1% -1% -2% -2% -2% -2% $qq 42155/s 27% 6% 1% -- -0% -1% -1% -1% -1% "" 42326/s 27% 7% 1% 0% -- -0% -1% -1% -1% m"" 42520/s 28% 7% 2% 1% 0% -- -0% -0% -0% m// 42568/s 28% 8% 2% 1% 1% 0% -- -0% -0% // 42626/s 28% 8% 2% 1% 1% 0% 0% -- -0% qq// 42707/s 28% 8% 2% 1% 1% 0% 0% 0% --
值得注意的是,它们的速度基本上都是相同的,
所以基本上,你如何设置regex并不重要
|
![]() |
5
0
所以只使用
|
![]() |
DotFX · RegEx捕获关键字前但括号后的所有内容 4 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 4 月前 |
![]() |
iato · 确保正则表达式不从命名材料中的数字中提取 5 月前 |
![]() |
vr8ce · 非成对标记中特定字符的正则表达式 5 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 5 月前 |
![]() |
Carsten · 使用最近的搜索模式更改文本块 5 月前 |