J'ai ce regex
(?:$|^| )(one|common|Word|or|another)(?:$|^| )
qui correspond bien à moins que les deux mots ne soient côte à côte.
One one's more Word'word common Word or another Word more another
More and more years to match one or more other strings
And common Word things and or
Dans ce qui précède, il correspond à one
à la ligne deux mais pas au or
juste à côté. Idem pour common
et Word
dans la troisième ligne.
Exemple en direct: http://regex101.com/r/hV3wQ
Je pense que cela a quelque chose à voir avec le nombre de groupes qui ne correspondent pas. Mais, je ne sais pas comment atteindre l'objectif final de faire correspondre toute la liste de mots sans aucun caractère autour d'eux.
Je ne veux pas le one
dans one's
ou le mot dans Word'word
à mettre en correspondance.
Étant donné que vos groupes de capture définissent explicitement un caractère de chaque côté du mot commun, il recherche space
Word
space
puis lorsqu'il ne trouve pas d'autre space
, il échoue.
Dans ce cas, comme vous ne voulez pas faire correspondre tous les caractères que les limites de Word attraperaient (point, apostrophe, etc.), vous devez utiliser un peu de ruse avec des têtes de recherche, des lookbehinds et des groupes non capturés. Essaye ça:
(?:^|(?<= ))(one|common|Word|or|another)(?:(?= )|$)
Les limites des mots sont toujours plus simples à implémenter, donc pour référence, vous pouvez également le faire (même si cela inclut '
, .
, etc.).
\b(one|common|Word|or|another)\b
Vous pouvez utiliser (?:[\s]|^)(one|common|Word|or|another)(?=[\s]|$)
au lieu.
Il ne correspondra pas à one's
, someone
, etc ...
Cochez DÉMO