Expression régulière pour correspondre à la chaîne commençant par "stop"

97

Comment créer une expression régulière pour faire correspondre un mot au début d'une chaîne. Nous cherchons à faire correspondre stople début d'une chaîne et tout peut la suivre.

Par exemple, l'expression doit correspondre:

stop
stop random
stopping

Merci.

Brad Mace
la source

Réponses:

184

Si vous souhaitez faire correspondre uniquement les lignes commençant par stop use

^stop

Si vous souhaitez faire correspondre les lignes commençant par le mot stop suivi d'un espace

^stop\s

Ou, si vous souhaitez faire correspondre les lignes commençant par le mot stop mais suivies d'un espace ou de tout autre caractère autre qu'un mot que vous pouvez utiliser (votre saveur regex le permet)

^stop\W

D'un autre côté, ce qui suit correspond à un mot au début d'une chaîne sur la plupart des saveurs de regex (dans ces saveurs \ w correspond à l'opposé de \ W)

^\w

Si votre saveur n'a pas le raccourci \ w, vous pouvez utiliser

^[a-zA-Z0-9]+

Méfiez-vous que ce deuxième idiome ne correspondra qu'à des lettres et à des chiffres, aucun symbole.

Consultez votre manuel de saveur regex pour savoir quels raccourcis sont autorisés et à quoi correspondent-ils exactement (et comment traitent-ils avec Unicode.)

Vinko Vrsalovic
la source
27
+1 pour généraliser votre réponse. J'aimerais en voir plus sur Stack Overflow. Cela en fait une meilleure ressource d'apprentissage à mon avis.
Jim
Comment le rendre insensible à la casse, c'est-à-dire correspondre à Stop ou Stop ou sTop?
Elton Garcia de Santana
Dépend de votre langue ... Compatible Perl peut utiliser le modificateur I. / regex / i .NET RegexOptions.IgnoreCase et ainsi de suite
Vinko Vrsalovic
N'oubliez pas ^stop\b, qui permettrait n'importe quelle limite, y compris la fin de la ligne
Mad Physicist
80

Essaye ça:

/^stop.*$/

Explication:

  • / charachters délimite l'expression régulière (c'est-à-dire qu'ils ne font pas partie de l'expression régulière en soi)
  • ^ signifie correspondance au début de la ligne
  • . suivi de * signifie correspondre à n'importe quel caractère (.), n'importe quel nombre de fois (*)
  • $ signifie jusqu'à la fin de la ligne

Si vous souhaitez que cet arrêt soit suivi d'un espace, vous pouvez modifier le RegEx comme suit:

/^stop\s+.*$/
  • \ s signifie n'importe quel caractère d'espacement
  • + après le \ s signifie qu'il doit y avoir au moins un caractère d'espacement après le mot d'arrêt

Remarque: gardez également à l'esprit que le RegEx ci-dessus exige que le mot d'arrêt soit suivi d'un espace! Il ne correspondrait donc pas à une ligne contenant uniquement: stop

Mike Dinescu
la source
Tous les langages n'utilisent pas de barres obliques avant pour délimiter les expressions rationnelles.
JAB
1
@Cat Megex: C'est précisément pourquoi j'ai ajouté l'explication. Si votre langue utilise autre chose pour délimiter l'expression régulière, remplacez le / par le caractère approprié
Mike Dinescu
1
@Mez oui, et une telle redondance augmente à la fois la clarté et les performances rexegg.com/regex-optimizations.html#anchors
MarredCheese
28

Si vous voulez faire correspondre quoi que ce soit après un arrêt de mot et non seulement au début de la ligne, vous pouvez utiliser: \bstop.*\b- mot suivi d'une ligne

Mot jusqu'à la fin de la chaîne

Ou si vous voulez faire correspondre le mot dans la chaîne, utilisez \bstop[a-zA-Z]*- seuls les mots commençant par stop

Seuls les mots commençant par stop

Ou le début des lignes avec arrêt ^stop[a-zA-Z]*pour le mot seulement - premier mot seulement
La ligne entière ^stop.*- première ligne de la chaîne uniquement

Et si vous voulez faire correspondre toutes les chaînes commençant par stop, y compris les nouvelles lignes, utilisez: /^stop.*/s- chaîne multiligne commençant par stop

Waxo
la source
20

Comme l'a dit @SharadHolani. Cela ne correspondra pas à tous les mots commençant par " arrêter "

. Seulement si c'est au début d'une ligne comme " stop going ". @Waxo a donné la bonne réponse:

Celui - ci est un peu mieux, si vous voulez faire correspondre un mot commençant par « arrêt » et ne contenant que des lettres de A à Z .

\bstop[a-zA-Z]*\b

Cela correspondrait à tout

arrêter (1)

arrêter au hasard (2)

d'arrêt (3)

veux arrêter (4)

s'il vous plaît arrêtez (5)

Mais

/^stop[a-zA-Z]*/

correspondrait seulement à (1) jusqu'à (3), mais pas à (4) et (5)

Sedat Kilinc
la source
8
/stop([a-zA-Z])+/

Correspond à n'importe quel mot d'arrêt (arrêt, arrêt, arrêt, etc.)

Cependant, si vous voulez simplement faire correspondre "stop" au début d'une chaîne

/^stop/

fera: D

Mez
la source
2
Cela correspondra à "ne vous arrêtez pas"
Alex B
1
Cela ne correspondra pas à stop123 ou stop ,.
lostintranslation
7

Si vous voulez faire correspondre tout ce qui commence par «arrêter», y compris «arrêter», «arrêter» et «arrêter», utilisez:

^stop

Si vous voulez faire correspondre le mot stop suivi de quelque chose comme dans "stop going", "stop this", mais pas "stop" et pas "stop", utilisez:

^stop\W
Alex B
la source
0

Je déconseille une approche d'expression régulière simple à ce problème. Il y a trop de mots qui sont des sous-chaînes d'autres mots sans rapport, et vous vous rendrez probablement fou en essayant de suradapter les solutions plus simples déjà fournies.

Vous aurez besoin d'au moins un algorithme de dérivation naïf (essayez le radical Porter; il existe du code gratuit dans la plupart des langues) pour traiter le texte en premier. Conservez ce texte traité et le texte prétraité dans deux tableaux séparés par espace. Assurez-vous que chaque caractère non alphabétique obtient également son propre index dans ce tableau. Quelle que soit la liste de mots que vous filtrez, arrêtez-les également.

L'étape suivante serait de trouver les indices de tableau qui correspondent à votre liste de mots «stop» radicaux. Supprimez-les du tableau non traité, puis rejoignez-les sur des espaces.

Ce n'est que légèrement plus compliqué, mais ce sera une approche beaucoup plus fiable. Si vous avez des doutes sur la valeur d'une approche plus orientée PNL, vous voudrez peut-être faire des recherches sur les erreurs clbuttic .

Robert Elwell
la source
0

Si vous voulez que le mot commence par "stop", vous pouvez utiliser le modèle suivant. "^ arrêtez. *"

Cela correspondra aux mots commençant par stop suivi de n'importe quoi.

Manisha Chaurasia
la source
1
Pourriez-vous pas simplement utiliser "^stop"?
Stephen Rauch
Ça dépend. Tout en parlant en termes de syntaxe java, nous pouvons utiliser l'objet Pattern et Matcher pour utiliser regex ou la méthode .matches () à utilisation directe avec l'objet String. Ils diffèrent dans le résultat comme ci-dessous: code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
Manisha Chaurasia
1
Cela correspond uniquement si le mot au début de la ligne. Si les mots commençant par «stop» sont au milieu de la ligne ou à la fin, cette expression régulière ne correspondra pas. @StephenRauch si vous omettez [az] *, vous n'obtiendrez pas de mots comme "arrêter" en entier. Dans le cas de "l'arrêt", vous obtenez "stop" et "ping" serait manquant.
Sedat Kilinc