2 votes

Regexp : comment faire correspondre tout ce qui n'est pas dans un motif ?

Je veux faire correspondre tout ce qui est dans une chaîne qui fait no correspondent à un modèle donné ; par exemple [a-z] .

Étant donné la chaîne de caractères abc4jkf8 4à3in j'ai besoin de correspondre 48 4à3 .

J'ai essayé avec ([a-z])+(?![a-z]) mais cela correspond exactement à l'opposé de ce dont j'ai besoin. Avec la chaîne ci-dessus, cette regexp correspond à abcjkfin .

Des idées ?

7voto

Guffa Points 308133

Vous utilisez un ensemble négatif :

([^a-z]+)

2voto

Spidfire Points 1132
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] correspond à chaque caractère qui n'est pas a-z.

2voto

Anthony Points 87

Pourquoi ne pas utiliser preg_replace.

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

cela donne le résultat souhaité

1voto

skyfoot Points 3480

Vous devez faire correspondre tout caractère qui n'est pas un alphabet. Le ^ indique qu'il ne faut pas faire correspondre les caractères alpha.

[^a-z]*

1voto

Artefacto Points 50896
$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');
}

donne ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X