![当涉及 m/ 多行时,Regex Coach 会损坏吗?](https://linux22.com/image/1622827/%E5%BD%93%E6%B6%89%E5%8F%8A%20m%2F%20%E5%A4%9A%E8%A1%8C%E6%97%B6%EF%BC%8CRegex%20Coach%20%E4%BC%9A%E6%8D%9F%E5%9D%8F%E5%90%97%EF%BC%9F.png)
当谈到“将字符串视为多行”时,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 更好”。我仍然在使用此工具,只是为了“步骤”选项卡,它允许我逐步查看正则表达式的执行情况,这对于找出它匹配或不匹配特定字符串的原因,或者正则表达式执行缓慢的原因非常有用。我在其他任何工具、软件或网站上都找不到该功能。