PHP регулярное выражение не новая строка - PullRequest
2 голосов
/ 15 ноября 2009

Как мне получить оператор регулярного выражения, который принимает любой символ, кроме новых строк. Это включает в себя все, но также включает в себя новые строки, что не то, что я хочу:

"/(.*)/"

Ответы [ 6 ]

16 голосов
/ 15 ноября 2009

Точка . не соответствует символу новой строки, если вы не используете модификатор s.

>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1
4 голосов
/ 15 ноября 2009

Как написано на странице документации PHP по модификаторам Preg, точка . НЕ включает символы новой строки, только когда вы используете модификатор s. Источник

1 голос
/ 15 ноября 2009
#!/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 голос
/ 15 ноября 2009

Поведение по умолчанию не должно соответствовать новой строке. Потому что модификатор "s" используется, чтобы точка соответствовала всем символам, включая новые строки. Может быть, вы можете привести пример, чтобы посмотреть?

1 голос
/ 15 ноября 2009

Следующее регулярное выражение должно соответствовать любому символу, кроме символов новой строки

/[^\n]+/
0 голосов
/ 15 ноября 2009

это странно, потому что по умолчанию точка (.) Не принимает переводы строки. Скорее всего, у вас есть символ «\ r» (возврат каретки), поэтому вам нужно удалить оба: /[^\r\n]/

ах, вы использовали / s

...