web-dev-qa-db-fra.com

Expression régulière pour faire correspondre les caractères au début de la ligne uniquement

J'essaie de travailler sur des expressions régulières. J'ai un fichier mainframe qui a plusieurs champs. J'ai un analyseur de fichiers à plat qui distingue plusieurs types d'enregistrements en fonction des trois premières lettres de chaque ligne. Comment puis-je écrire une expression régulière où les trois premières lettres sont «CTR».

46
SaiBand

Début de ligne ou début de chaîne? 

Début et fin de chaîne

/^CTR.*$/

/ = délimiteur
^ = début de la chaîne
CTR = CTR littéral
$ = fin de chaîne
.* = zéro ou plus de tous les caractères sauf newline 

Début et fin de ligne

/^CTR.*$/m

/ = délimiteur
^ = début de la ligne
CTR = CTR littéral
$ = fin de ligne
.* = zéro ou plus de tous les caractères sauf newline
m = active le mode multiligne, cela définit regex pour traiter chaque ligne comme une chaîne, donc ^ et $ correspondra au début et à la fin de la ligne 

En mode multiligne, vous pouvez toujours faire correspondre le début et la fin de la chaîne avec les ancres permanentes \A\Z.

/\ACTR.*\Z/m

\A = signifie le début de la chaîne
CTR = CTR littéral
.* = zéro ou plus de tous les caractères sauf newline
\Z = fin de chaîne
m = active le mode multiligne 

En tant que tel, une autre façon de faire correspondre le début de la ligne serait la suivante:

/(\A|\r|\n|\r\n)CTR.*/

ou

/(^|\r|\n|\r\n)CTR.*/

\r = retour chariot/ancien saut de ligne Mac OS
\n = saut de ligne/nouvelle ligne Unix/Mac OS X
\r\n = nouvelle ligne Windows 

Notez que si vous allez utiliser la barre oblique inverse \ dans une chaîne de programme prenant en charge l'échappement, comme les guillemets doubles php "", vous devez d'abord les échapper.

donc pour exécuter \r\nCTR.* vous l'utiliseriez comme "\\r\\nCTR.*" 

85
Timo Huovinen
^CTR

ou

^CTR.*

modifier:

Pour être plus clair ... ^CTR correspondra au début de la ligne et à ces caractères ... si tout ce que vous voulez faire est de faire correspondre une ligne elle-même (et avez déjà la ligne à utiliser), c'est tout ce dont vous avez vraiment besoin (mais Dans ce cas, il vaut peut-être mieux utiliser une fonction de type préfabriquée substr() ... ne sais pas quelle langue vous utilisez ...). Mais si vous essayez de faire correspondre la ligne, vous aurez besoin de quelque chose comme .* ou .*$ ou autre, selon la fonction de langage/expression régulière que vous utilisez ...

14
Crayon Violent

Essayez ^CTR.\*, ce qui signifie littéralement signifie début de ligne, CTR, n'importe quoi .

Ceci sera sensible à la casse , et la définition de la non-sensibilité à la casse dépendra de votre langage de programmation ou utilisera ^[Cc][Tt][Rr].\* si la non-sensibilité à la casse dans plusieurs environnements est importante.

7
Gnat
^CTR.*$

correspond à une ligne commençant par CTR.

3
Tim Pietzcker

Vous ne savez pas comment appliquer cela à votre fichier sur votre serveur, mais généralement, l'expression régulière correspondant au début d'une chaîne est la suivante:

^CTR


Le ^ signifie le début de la chaîne/ligne

2
Pascal MARTIN

Symbole Regex à faire correspondre au début d'une ligne:

^

Ajoutez la chaîne que vous recherchez (CTR) à la regex comme ceci: 

^CTR

Exemple: regex

Cela devrait suffire! 

Toutefois, si vous souhaitez obtenir le texte de toute la ligne dans la langue de votre choix, ajoutez un modèle "match no", .*

^CTR.*

Exemple: more regex

Si vous voulez devenir fou, utilisez le matcher end of line 

$

Ajoutez cela au motif de regex en croissance: 

^CTR.*$

Exemple: devenons fous

Remarque: En fonction de comment et où vous utilisez regex, vous devrez peut-être utiliser un modificateur multiligne pour le faire correspondre à plusieurs lignes. Il pourrait y avoir toute une discussion sur la meilleure stratégie pour extraire les lignes d'un fichier afin de les traiter, et certaines stratégies nécessiteraient ceci: 

Indicateur multilignem (il est spécifié de différentes manières dans différentes langues/contextes)

/^CTR.*/gm

Exemple: nous devions utiliser m on regex101

2
Josh Hull
(? i) ^ [\ r\n] * CTR 

 (? i) - sensible à la casse - Supprimer si sensible à la casse .
 [\ r\n] - ignorer l'espace et les nouvelles lignes 
 * - 0 ou plusieurs fois la même chose 
 CTR - votre nom commence par string .

1

Il y a des ambiguïtés dans la question.

Quelle est votre chaîne d'entrée? Est-ce le fichier entier? Ou est-ce une ligne à la fois? Certaines des réponses supposent ce dernier. Je veux répondre à l'ancien.

Que voudriez-vous revenir de votre expression habituelle? Le fait que vous vouliez un vrai/faux sur si une correspondance a été faite? Ou voulez-vous extraire toute la ligne dont le début commence par CTR? Je vous répondrai que vous voulez seulement un vrai/faux match.

Pour ce faire, il suffit de déterminer si le CTR se produit au début d'un fichier ou immédiatement après une nouvelle ligne.

/(?:^|\n)CTR/
0
Stephen Quan