Imaginez que vous essayez de faire correspondre le motif "stackoverflow".
Vous voulez ce qui suit:
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 existe des espaces sur les deux sites en utilisant:
/\s(stackoverflow)\s/
Idem avec 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?
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 d'espace dans votre match, vous pouvez utiliser lookbehind/aheads.
(?<=\s|^) #to look behind the match
(stackoverflow) #the string you want. () optional
(?=\s|$) #to look ahead.
(^|\s)
correspondrait à l’espace ou au début de la chaîne et ($|\s)
pour l'espace ou la fin de la chaîne. Ensemble c'est:
(^|\s)stackoverflow($|\s)
Voici ce que j'utiliserais:
(?<!\S)stackoverflow(?!\S)
En d'autres termes, faites correspondre "stackoverflow" s'il n'est pas précédé par un caractère autre qu'un espace et non suivi par un caractère autre qu'un espace.
C’est mieux (IMO) que l’approche "espace-ou-ancre", et cela ne suppose pas que la chaîne commence et finit avec des caractères Word comme le \b
approche fait.
\b
correspond aux limites de Word (sans faire correspondre réellement les caractères), les éléments suivants doivent faire ce que vous voulez:
\bstackoverflow\b