【发布时间】:2023-03-24 17:13:01
【问题描述】:
我如何拥有一个接受除换行符以外的任何字符的正则表达式语句。这包括任何内容,但也包括我不想要的新行:
"/(.*)/"
【问题讨论】:
-
你错了。请参阅 jeremy Ruten 的回答。
我如何拥有一个接受除换行符以外的任何字符的正则表达式语句。这包括任何内容,但也包括我不想要的新行:
"/(.*)/"
【问题讨论】:
点 . 不匹配换行符,除非您使用 s 修饰符。
>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1
【讨论】:
正如在 Preg Modifiers 的 PHP 文档页面上所写,点 . 不包含换行符,仅当您使用 s 修饰符时。
Source
【讨论】:
以下正则表达式应匹配除换行符以外的任何字符
/[^\n]+/
【讨论】:
默认行为不应匹配新行。因为“s”修饰符用于使点匹配所有字符,包括换行符。也许你可以提供一个例子来看看?
【讨论】:
#!/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 修饰符。
【讨论】:
这很奇怪,因为默认情况下点 (.) 不接受换行符。很可能你在那里有一个“\r”(回车)字符,所以你需要消除两者:/[^\r\n]/
啊,你用的是/s
【讨论】: