PHP正则表达式不匹配换行符

3
我应该怎样编写一个正则表达式,能够匹配除了换行符以外的任何字符。这种情况下,我需要排除换行符,因为它并不是我想要的内容。
"/(.*)/"

你错了。看看Jeremy Ruten的回答。 - Franz
6个回答

16
点号.在不使用s修饰符的情况下无法匹配换行符。
>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1

4
根据PHP文档中对Preg修饰符的描述,点号.不包括换行符,除非您使用s修饰符。 来源

1

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

/[^\n]+/

2
是的,除非原始匹配为空字符串并且此正则表达式需要至少一个非换行符字符... "/ [^ \n] */" (如果您使用的是Windows,则可能还要排除\ r ...) - grossvogel

1
#!/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修饰符)。


1

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


0

这很奇怪,因为默认情况下点(.)不接受换行符。很可能你有一个"\r"(回车)字符,所以你需要同时消除它们:/[^\r\n]/

啊,原来你在使用/s。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接