6 votes

[[:> :]] ou [[:< :]] ne correspondent pas.

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 ?

Démonstration en ligne

3voto

Vous pouvez utiliser \b(?<=d) o \b(?=d) à la place. Dans tous les cas, le moteur PCRE convertit [[:<:]] a \b(?=\w) y [[:>:]] a \b(?<=\w) avant de commencer le match.

3voto

Wiktor Stribiżew Points 100073

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 ( [[:>:]] ).

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