【问题标题】:PHP regex not new linePHP正则表达式不是新行
【发布时间】:2023-03-24 17:13:01
【问题描述】:

我如何拥有一个接受除换行符以外的任何字符的正则表达式语句。这包括任何内容,但也包括我不想要的新行:

"/(.*)/"

【问题讨论】:

  • 你错了。请参阅 jeremy Ruten 的回答。

标签: php regex newline


【解决方案1】:

. 不匹配换行符,除非您使用 s 修饰符。

>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1

【讨论】:

    【解决方案2】:

    正如在 Preg Modifiers 的 PHP 文档页面上所写,点 . 不包含换行符,仅当您使用 s 修饰符时。 Source

    【讨论】:

      【解决方案3】:

      以下正则表达式应匹配除换行符以外的任何字符

      /[^\n]+/
      

      【讨论】:

      • 是的,除了原始字符串匹配空字符串并且这个字符串至少需要一个非换行符...“/[^\n]*/”(如果您在 Windows 上,您可能还想排除 \r ......)
      【解决方案4】:

      默认行为不应匹配新行。因为“s”修饰符用于使点匹配所有字符,包括换行符。也许你可以提供一个例子来看看?

      【讨论】:

        【解决方案5】:
        #!/usr/bin/env php
        <?php
        
        $test = "Some\ntest\nstring";
        
        // Echos just "Some"
        preg_match('/(.*)/', $test, $m);
        echo "First test: ".$m[0]."\n";
        
        // Echos the whole string.
        preg_match('/(.*)/s', $test, $m);
        echo "Second test: ".$m[0]."\n";
        

        所以我不知道您的程序有什么问题,但不是正则表达式(除非您在实际应用程序中有 /s 修饰符。

        【讨论】:

          【解决方案6】:

          这很奇怪,因为默认情况下点 (.) 不接受换行符。很可能你在那里有一个“\r”(回车)字符,所以你需要消除两者:/[^\r\n]/

          啊,你用的是/s

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            相关资源
            最近更新 更多