当涉及 m/ 多行时,Regex Coach 会损坏吗?

当涉及 m/ 多行时,Regex Coach 会损坏吗?

当谈到“将字符串视为多行”时,Regex Coach 是否出现故障?

(对于 's' 还有另一个选项“将字符串视为单行”,我认为这个名字不太好,可能意味着“点匹配新行”。我见过 perl 将其用作/s修饰符。并且在 regex coach 中进行测试表明 's' 是“点匹配新行”。

它有两个盒子。M 和 S

在此处输入图片描述

描述在这里

在此处输入图片描述

这个描述听起来很奇怪,因为它们是相反的,你只需要一个复选框就可以执行布尔选项。你也可以同时选择“单行”和“多行”。

如上所述,毫无疑问 's' 是“点匹配新行”。因此它不是 'm' 的对立面。

我认为“m”是“读取全部内容”/可能匹配全部内容,就像支持正则表达式的文本编辑器一样。我知道 perl 有一个 -0777 选项。

但看看这个

在此处输入图片描述

我没有在那里选择多行选项。

所以正则表达式肯定不能跨行工作

这当然与 perl 的操作方式不同。

没有 -0777 的 Perl 是“逐行”模式,并且(与 sed 不同,它可以找到换行符),它(与 sed 一样)不能跨行。

(在 cygwin 中完成的命令,因为它提供了一个很好的回声 - 带有 -e 的回声,它还提供 perl)

$ echo -e 'abc\ndef' | perl -pe 's/abc\n//'
def

$ echo -e 'abc\ndef' | perl -pe 's/ab[^z]*//'
def

我读过了https://www.regular-expressions.info/modifiers.html 多行模式会影响插入符号和美元符号的匹配。我猜想 m-(多行) 仍然会跨越新行,而不仅仅是影响插入符号和美元符号。

例如在 perl 中

$ echo -e 'abc\ndef\nghi' | perl -0777 -pe 's/abc\ndef//'

ghi

看看 Regex Coach 做了什么

正则表达式可以跨行。^ 匹配多行字符串的开头,$ 匹配多行字符串的结尾。但是不检查多行

在此处输入图片描述


如果我打开多行,我会得到该字符串和正则表达式的相同结果

在此处输入图片描述


在这个例子中,当我勾选多行框时,它的作用就像单行一样,因为插入符号和美元符号与行首和行尾相匹配。虽然我们知道它不是单行,因为从上面的例子中,\n 跨越了多行。

在此处输入图片描述

-- 并且当多行未勾选时,它的作用有点像多行,因为插入符号和美元符号不是逐行匹配的。它们必须匹配字符串的开头和结尾,但它不匹配任何内容

在此处输入图片描述

我知道 Regex Buddy 更好。但我喜欢 regex coach 有常见的单字母修饰符,这很好地提醒了我熟悉这些修饰符。

但是正则表达式教练中的‘m’的操作是否完全损坏了呢?

答案1

我认为这是一个命名不当的选项的情况,/m 的“将字符串视为多行”会影响“^”和“$”,而/s 的“将字符串视为单行”会影响“。”。

至于带有 \n 的测试用例,它们不具有代表性,perl -pe 在循环中每行执行一次测试,而使用 regex coach 则针对单个字符串测试正则表达式(/s 除外),这完全不一样。

顺便说一句,我不同意你的说法“我知道 Regex Buddy 更好”。我仍然在使用此工具,只是为了“步骤”选项卡,它允许我逐步查看正则表达式的执行情况,这对于找出它匹配或不匹配特定字符串的原因,或者正则表达式执行缓慢的原因非常有用。我在其他任何工具、软件或网站上都找不到该功能。

相关内容