Regexp: как сопоставить все, что не в шаблоне? - PullRequest
2 голосов
/ 04 июня 2010

Я хочу сопоставить все в строке, которая не соответствует данному шаблону; например [a-z].

Учитывая строку abc4jkf8 4à3in, мне нужно соответствовать 48 4à3.

Я пробовал с ([a-z])+(?![a-z]), но это полностью противоположно тому, что мне нужно. С приведенной выше строкой это регулярное выражение соответствует abcjkfin.

Есть идеи?

Ответы [ 5 ]

7 голосов
/ 04 июня 2010

Вы используете отрицательный набор:

([^a-z]+)
2 голосов
/ 04 июня 2010

почему бы не использовать preg_replace.

$string = "abc4jkf8 4à3in";
echo preg_replace("/[a-z]/", "", $string);

это дает желаемый результат

2 голосов
/ 04 июня 2010
preg_match_all('/([^a-z]+)/si', $code, $result, PREG_PATTERN_ORDER);
$unmached = "";
for ($i = 0; $i < count($result[0]); $i++) {
    $unmached .= $result[0][$i];
}
echo $unmached;

[^a-z] соответствует каждому символу, отличному от a-z.

1 голос
/ 04 июня 2010
$a = "abc4jkf8 4à3in";

function stringConcat($a, $b) { return $a.$b; }

if (preg_match_all("/[^a-z]/", $a, $matches)) {
    echo array_reduce(reset($matches), 'stringConcat');
}

дает то, что вы хотите.

1 голос
/ 04 июня 2010

Вы должны соответствовать любому характеру, который не является альфа. ^ Говорит не совпадать с альфа-символами

[^a-z]*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...