Domanda Espressione regolare per abbinare caratteri solo all'inizio della riga [chiuso]


Sto cercando di lavorare su espressioni regolari. Ho un file mainframe che ha diversi campi. Ho un parser di file flat che distingue diversi tipi di record in base alle prime tre lettere di ogni riga. Come scrivo un'espressione regolare in cui le prime tre lettere sono "CTR".


44
2018-04-01 16:24


origine


risposte:


Inizio della linea o inizio della stringa?

Inizio e fine della stringa

/^CTR.*$/

/ = delimitatore
^ = inizio della stringa
CTR = CTR letterale
$ = fine della stringa
.* = zero o più di qualsiasi carattere tranne newline

Inizio e fine riga

/^CTR.*$/m

/ = delimitatore
^ = inizio della linea
CTR = CTR letterale
$ = fine della linea
.* = zero o più di qualsiasi carattere tranne newline
m = abilita la modalità multi-linea, imposta regex per trattare ogni riga come una stringa, quindi ^ e $ abbinerà inizio e fine riga

In modalità multi-linea puoi ancora abbinare l'inizio e la fine della stringa con \A\Z ancoraggi permanenti

/\ACTR.*\Z/m

\A = significa inizio della stringa
CTR = CTR letterale
.* = zero o più di qualsiasi carattere tranne newline
\Z = fine della stringa
m = abilita la modalità multi-linea

Come tale, un altro modo per abbinare l'inizio della linea sarebbe come questo:

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

o

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

\r = ritorno a capo / vecchio Mac OS newline
\n = line-feed / Unix / Mac OS X newline
\r\n = windows newline

Nota, se hai intenzione di utilizzare la barra rovesciata \ in alcune stringhe di programma che supportano l'escaping, come le doppie virgolette php "" allora devi prima fuggire da loro

quindi per correre \r\nCTR.* lo useresti come "\\r\\nCTR.*" 


71
2018-03-26 18:47



^CTR

o

^CTR.*

modificare:

Per essere più chiaro ... ^CTR corrisponderà all'inizio della linea e quei caratteri ... se tutto ciò che si vuole fare è corrispondere per una linea stessa (e avere già la linea da usare) allora questo è tutto ciò di cui si ha veramente bisogno (ma se questo è il caso, potrebbe essere meglio fuori usando un prefabbricato substr() tipo funzione ... non so che lingua stai usando ...). Ma se stai cercando di abbinare e afferrare la linea, avrai bisogno di qualcosa del genere .* o .*$ o qualsiasi altra cosa, a seconda della lingua / funzione regex che stai usando ...


14
2018-04-01 16:26



Provare ^CTR.\*, che letteralmente significa inizio linea, CTR, qualsiasi cosa.

Questo sarà che tiene conto del maiuscolo o minuscoloe l'impostazione della sensibilità senza maiuscole / minuscole dipende dal linguaggio di programmazione o dall'uso ^[Cc][Tt][Rr].\* se le insensibilità alle maiuscole e all'influenza sono importanti.


6
2018-04-01 16:26



^CTR.*$

corrisponde a una linea che inizia con CTR.


3
2018-04-01 16:26



Non sai come applicarlo al tuo file sul tuo server, ma in genere, la regex che corrisponde all'inizio di una stringa sarebbe:

^CTR


Il ^ significa inizio di stringa / linea


2
2018-04-01 16:26



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

(? i) - maiuscolo / minuscolo - Rimuovi se sensibile al maiuscolo / minuscolo.
[\ r \ n]: ignora lo spazio e le nuove linee
* - 0 o più volte lo stesso
CTR: la tua inizia con una stringa.


1
2017-10-15 10:24



Simbolo Regex da abbinare all'inizio di una riga:

^

Aggiungi la stringa che stai cercando (CTR) alla regex come questo:

^CTR

Esempio: regex

Questo dovrebbe essere abbastanza! 

Tuttavia, se hai bisogno di ottenere il testo da tutta la linea nella tua lingua preferita, aggiungi un pattern "match anything" .*:

^CTR.*

Esempio: più regex

Se vuoi diventare pazzo, usa il fine della linea Matcher

$

Aggiungilo al pattern di regex in crescita:

^CTR.*$

Esempio: facciamo impazzire

Nota: A seconda di come e dove usi la regex, potresti dover utilizzare un modificatore multilinea per farlo corrispondere a più linee. Potrebbe esserci un'intera discussione sulla migliore strategia per il prelievo di righe da un file per elaborarle, e alcune delle strategie richiederebbero questo:

Bandiera multilinea  m (questo è specificato in vari modi in varie lingue / contesti)

/^CTR.*/gm

Esempio: abbiamo dovuto usare m su regex101


1
2018-02-21 19:38



Ci sono delle ambiguità nella domanda.

Qual è la stringa di input? È l'intero file? O è 1 riga alla volta? Alcune delle risposte stanno assumendo quest'ultimo. Voglio rispondere al primo.

Cosa ti piacerebbe tornare dalla tua espressione regolare? Il fatto che tu voglia un vero / falso sul fatto che sia stata fatta una partita? O vuoi estrarre l'intera riga il cui inizio inizia con CTR? Ti risponderò solo per una corrispondenza vera / falsa.

Per fare questo, abbiamo solo bisogno di determinare se il CTR si verifica all'inizio del file o immediatamente dopo una nuova riga.

/(?:^|\n)CTR/

0
2018-05-16 03:45