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

J’essaie de travailler sur des expressions régulières. J’ai un fichier mainframe qui comporte plusieurs champs. J’ai un parsingur de fichier plat qui distingue plusieurs types d’enregistrements basés sur les trois premières lettres de chaque ligne. Comment écrire une expression régulière où les trois premières lettres sont «CTR».

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 = littéral CTR
$ = fin de chaîne
.* = zéro ou plus de n’importe quel caractère sauf newline

Début et fin de ligne

 /^CTR.*$/m 

/ = délimiteur
^ = début de ligne
CTR = littéral CTR
$ = fin de ligne
.* = zéro ou plus de n’importe quel caractère sauf newline
m = active le mode multi-ligne, cela définit regex pour traiter chaque ligne comme une chaîne, donc ^ et $ correspondent au début et à la fin de la ligne

En mode multi-ligne, vous pouvez toujours associer le début et la fin de la chaîne aux ancres permanentes \A\Z

 /\ACTR.*\Z/m 

\A = signifie début de chaîne
CTR = littéral CTR
.* = zéro ou plus de n’importe quel caractère 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 / ancienne nouvelle ligne Mac OS
\n = saut de ligne / Unix / Mac OS X newline
\r\n = windows newline

Notez que si vous utilisez 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.

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

 ^CTR 

ou

 ^CTR.* 

modifier:

Pour être plus clair … ^CTR correspondra au début de 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) alors c’est tout ce dont vous avez vraiment besoin (mais si c’est le cas, il vaut peut-être mieux utiliser une fonction de type substr() … ne sais pas quelle langue vous utilisez …). Mais si vous essayez de faire correspondre et de saisir la ligne, vous aurez besoin de quelque chose comme .* Ou .*$ Ou autre, selon la fonction de langue / regex que vous utilisez …

Essayez ^CTR.\* , Qui signifie littéralement début de ligne, CTR, n’importe quoi .

Cela sera sensible à la casse et le réglage de la non-sensibilité à la casse dépendra de votre langage de programmation, ou utilisez ^[Cc][Tt][Rr].\* Si l’insensibilité à la casse inter-environnements est importante.

 ^CTR.*$ 

correspond à une ligne commençant par CTR .

Vous ne savez pas comment l’appliquer à votre fichier sur votre serveur, mais en règle générale, le regex correspondant au début d’une chaîne serait:

 ^CTR 

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

Symbole de regex à associer au début d’une ligne:

 ^ 

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

 ^CTR 

Exemple: regex

Cela devrait suffire!

Toutefois, si vous avez besoin d’obtenir le texte de la ligne entière dans la langue de votre choix, ajoutez un modèle de “correspondance” .* :

 ^CTR.* 

Exemple: plus de regex

Si vous voulez devenir fou, utilisez le correcteur de fin de ligne

 $ 

Ajoutez cela au motif regex croissant:

 ^CTR.*$ 

Exemple: Let ‘s get crazy

Remarque: selon comment et où vous utilisez l’expression rationnelle, 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 sélectionner des lignes dans un fichier pour les traiter, et certaines stratégies nécessiteraient ceci:

Indicateur multiligne m (spécifié de différentes manières dans divers langages / contextes)

 /^CTR.*/gm 

Exemple: nous avons dû utiliser m sur regex101

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

 (? i) - Insensible à la casse - Supprimer si sensible à la casse.
 [\ r \ n] - ignore l'espace et les nouvelles lignes
 * - 0 fois ou plus les mêmes
 CTR - vos débuts avec de la chaîne.

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

Quelle est votre chaîne de saisie? Est-ce le fichier entier? Ou est-ce 1 ligne à la fois? Certaines des réponses supposent ce dernier. Je veux répondre à la première.

Que voudriez-vous revenir de votre expression régulière? Le fait que vous vouliez un vrai / faux si une correspondance a été faite? Ou voulez-vous extraire la ligne entière dont le début commence par CTR? Je répondrai que vous ne voulez qu’un match vrai / faux.

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

 /(?:^|\n)CTR/