【问题标题】:\s unexpectedly matches over multiple lines\s 意外匹配多行
【发布时间】:2013-07-23 19:35:43
【问题描述】:

我正在为 Windows 运行最新版本的 Notepad++ 6.3.2。尝试使用“正则表达式”进行“查找”,而不在以下示例两行文本文件中选中“匹配换行符”复选框。

hello
world

搜索模式hello.*world 不匹配任何内容,因为未选中“匹配换行符”(选中复选框时匹配)。但是,模式hello\s*world 匹配上面的两行,这有点意外,因为未检查“匹配换行符”。我认为我以前使用的旧版本没有该功能/错误。当我只想匹配单行并带有尾随空格字符时,这有点烦人。

这是预期的吗?

【问题讨论】:

    标签: regex notepad++


    【解决方案1】:

    查看界面显示“.matches newline”

    在您的第二个“hello\sworld”案例中,您不再使用“.”。在正则表达式中。

    \s 用于匹配 \r 或 \n 字符。

    也许对Regex to match more than 2 white spaces but not new line 稍作修改会为您工作

    即使用“你好[\t]*world”?

    【讨论】:

    • 感谢 Knightsy,我将坚持改编“[ \t]*”,因为“\s*”匹配单行和多行的模式,即“hello”在一行上, “世界”在下一行。似乎“\s*”覆盖了未选中的“匹配换行符”复选框。
    • 它没有覆盖任何东西,复选框是“点匹配换行符”复选框,因此它只指定正则表达式中点(“.”)的行为,与\s无关。 - 无论如何,我很高兴我的回答对你有用,如果有,请接受。
    【解决方案2】:

    我试着解释一下:

    matches newlines 应该是(不是 100% 确定,没有检查记事本的源代码)DOTALL 正则表达式的标志。这意味着,点 . 也将匹配换行符。

    你所拥有的是\s\s 表示匹配任何空白字符(空格、制表符、换行符)。所以它就是这样工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多