154 votes

Regex : spécifiez « espace ou début de chaîne » et « espace ou fin de chaîne »

Imaginez que vous essayez de faire correspondre le motif "stackoverflow".

Vous souhaitez les éléments suivants :

  this is stackoverflow and it rocks [MATCH]

 stackoverflow is the best [MATCH]

 i love stackoverflow [MATCH]

 typostackoverflow rules [NO MATCH]

 i love stackoverflowtypo [NO MATCH]

Je sais comment analyser stackoverflow s'il a des espaces sur les deux sites en utilisant:

 /\s(stackoverflow)\s/

Idem si c'est au début ou à la fin d'une chaîne :

 /^(stackoverflow)\s/

/\s(stackoverflow)$/

Mais comment spécifier « espace ou fin de chaîne » et « espace ou début de chaîne » en utilisant une expression régulière ?

210voto

Jacob Eggers Points 5452

Vous pouvez utiliser l'un des éléments suivants :

 \b      #A word break and will work for both spaces and end of lines.
(^|\s)  #the | means or. () is a capturing group. 


/\b(stackoverflow)\b/

De plus, si vous ne souhaitez pas inclure l'espace dans votre correspondance, vous pouvez utiliser lookbehind/aheads.

 (?<=\s|^)         #to look behind the match
(stackoverflow)   #the string you want. () optional
(?=\s|$)          #to look ahead.

87voto

gordy Points 2653

(^|\s) correspondrait à l'espace ou au début de la chaîne et ($|\s) à l'espace ou à la fin de la chaîne. Ensemble c'est :

 (^|\s)stackoverflow($|\s)

22voto

Alan Moore Points 39365

Voici ce que j'utiliserais :

  (?<!\S)stackoverflow(?!\S)

En d'autres termes, faites correspondre "stackoverflow" s'il n'est pas précédé d'un caractère non blanc et non suivi d'un caractère non blanc.

C'est plus propre (IMO) que l'approche "espace ou ancre", et cela ne suppose pas que la chaîne commence et se termine par des caractères de mot comme le fait l'approche \b

7voto

Andrew Clark Points 77748

\b correspond aux limites des mots (sans réellement correspondre à aucun caractère), donc ce qui suit devrait faire ce que vous voulez :

 \bstackoverflow\b

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