J'essaie d'utiliser [[:>:]]
dans mon regex mais ils ne sont pas acceptés alors que d'autres classes de caractères, par exemple [[:digit:]]
o [[:word:]]
sont. Qu'est-ce qui ne va pas ?
Réponses
Trop de publicités?Il s'agit d'un bogue, car ces constructions (limite du mot de départ, [[:<:]]
et se terminant par [[:>:]]
limite du mot) sont supportés par la bibliothèque PCRE elle-même :
COMPATIBILITY FEATURE FOR WORD BOUNDARIES In the POSIX.2 compliant library that was included in 4.4BSD Unix, the ugly syntax [[:<:]] and [[:>:]] is used for matching "start of word" and "end of word". PCRE treats these items as follows: [[:<:]] is converted to \b(?=\w) [[:>:]] is converted to \b(?<=\w) Only these exact character sequences are recognized. A sequence such as [a[:<:]b] provokes error for an unrecognized POSIX class name. This support is not compatible with Perl. It is provided to help migrations from other environments, and is best not used in any new patterns. Note that \b matches at the start and the end of a word (see "Simple asser- tions" above), and in a Perl-style pattern the preceding or following character normally shows which is wanted, without the need for the assertions that are used above in order to give exactly the POSIX be- haviour.
Lorsqu'il est utilisé dans un code PHP, il fonctionne :
if (preg_match_all('/[[:<:]]home[[:>:]]/', 'homeless and home', $m))
{
print_r($m[0]);
}
trouve Array ( [0] => home)
. Voir le Démonstration en ligne de PHP .
C'est donc l'équipe de développeurs de regex101.com qui a décidé (ou oublié) d'inclure la prise en charge de ces limites de mots appariés. .
À regex101.com à la place, utilisez \b
les limites des mots (au début et à la fin) qui sont prises en charge par les 4 moteurs regex de regex101.com : PCRE, JS, Python et Go.
Ces limites de mots sont principalement prises en charge par les moteurs de type POSIX. Démonstration de regex PostgreSQL par exemple. Le site [[:<:]]HR[[:>:]]
regex trouve une correspondance dans Head of HR
mais ne trouve aucune correspondance dans <A HREF="some.html
y CHROME
.
D'autres moteurs de regex qui supportent [[:<:]]
y [[:>:]]
les limites des mots sont en base R ( gsub
sans perl=TRUE
par exemple) et MySQL.
Dans Tcl regex, il y a \m
para [[:<:]]
(limite du mot de départ) et \M
pour la limite du mot final ( [[:>:]]
).