Regulärer Ausdruck, um Zeichen nur am Zeilenanfang zu finden
Ich versuche zu arbeiten auf regulären Ausdrücken. Ich habe ein mainframe-Datei, die mehrere Felder. Ich habe eine flach-Datei-parser unterscheidet mehrere Arten von Datensätzen basierend auf den ersten drei Buchstaben jeder Zeile. Wie Schreibe ich einen regulären Ausdruck, wo die ersten drei Buchstaben sind "CTR".
InformationsquelleAutor der Frage SaiBand | 2011-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anfang der Zeile am Anfang oder Ende der Zeichenfolge?
Anfang und Ende von string
/
= Trennzeichen^
= start of stringCTR
= literal CTR$
= end of string.*
= null oder mehr beliebige Zeichen außer newlineStart-und end-of-line
/
= Trennzeichen^
= start der LinieCTR
= literal CTR$
= end-of-line.*
= null oder mehr beliebige Zeichen außer newlinem
= aktiviert die multi-line-Modus, dieser setzt regex zu behandeln jede Zeile als string, so^
und$
entsprechen start-und end-of-lineWährend in multi-line-Modus können Sie noch Stimmen Anfang und Ende der Zeichenfolge mit
\A\Z
daueranker\A
= Anfang bedeutet, der stringCTR
= literal CTR.*
= null oder mehr beliebige Zeichen außer newline\Z
= end of stringm
= aktiviert die multi-line-ModusAls solche, eine andere Art zu match-Beginn der Zeile würde wie folgt Aussehen:
oder
\r
= carriage return /alte Mac OS newline\n
= line-feed /Unix/Mac OS X newline\r\n
= windows newlineBeachten Sie, wenn Sie den umgekehrten Schrägstrich
\
in einigen Programm-string, unterstützt die Flucht, wie die php doppelte Anführungszeichen""
dann müssen Sie entkommen, Sie zuerstso laufen
\r\nCTR.*
verwenden Sie es als"\\r\\nCTR.*"
InformationsquelleAutor der Antwort Timo Huovinen
oder
edit:
Mehr klar...
^CTR
match zu Beginn der Zeile und die chars...wenn alles, was Sie tun möchten ist Spiel für eine Linie selbst (und bereits über die Linie zu verwenden), dann das ist alles, was Sie wirklich brauchen (aber wenn dies der Fall ist, sollten Sie vielleicht besser mit einem Fertighaussubstr()
Typ Funktion...weiß nicht, was Sprache, die Sie benutzen...). Aber wenn Sie versuchen, zu entsprechen, und ergreifen Sie die Linie, müssen Sie so etwas wie.*
oder.*$
oder was auch immer, je nachdem, welche Sprache/regex-Funktion, die Sie verwenden...InformationsquelleAutor der Antwort Crayon Violent
Versuchen
^CTR.\*
die buchstäblich bedeutet start of line, CTR, alles.Diese werden groß-und Kleinschreibung und Einstellung nicht-case-sensitive ist, hängt von der Programmiersprache, oder verwenden Sie
^[Cc][Tt][Rr].\*
wenn Sie cross-Umwelt Fall-Unempfindlichkeit ankommt.InformationsquelleAutor der Antwort Gnat
entspricht einer Zeile beginnend mit
CTR
.InformationsquelleAutor der Antwort Tim Pietzcker
Nicht sicher, wie Sie Sie anwenden, um die Datei auf Ihrem server, sondern in der Regel den regulären Ausdruck für den Beginn einer Zeichenkette wäre :
Die
^
bedeutet Anfang string /ZeileInformationsquelleAutor der Antwort Pascal MARTIN
Regex-symbol Spiel am Anfang einer Zeile:
Fügen Sie die Zeichenfolge, die Sie suchen (
CTR
), um die regex so:Beispiel: regex
Das sollte genug sein!
Allerdings, wenn Sie brauchen, um den text aus die ganze Linie in Ihrer Sprache, fügen Sie eine "match-nichts" - Muster
.*
:Beispiel: mehr zu regex
Wenn Sie wollen, um verrückt, verwenden Sie die Ende der Zeile matcher
Hinzufügen, dass die wachsende regex-Muster:
Beispiel: lets get crazy
Hinweis: Je nachdem, wie und wo Sie sind mit regex, müssen Sie möglicherweise verwenden Sie ein multi-line-modifier, das mit mehreren Zeilen. Es könnte eine ganze Diskussion über die beste Strategie für die Kommissionierung von Zeilen aus einer Datei zu Bearbeiten, und einige der Strategien erfordern würde:
Multi-line-Flagge
m
(dies wird auf verschiedene Weise in verschiedenen Sprachen/Kontexte)Beispiel: wir hatten für den Einsatz von m auf regex101
InformationsquelleAutor der Antwort Josh Hull
InformationsquelleAutor der Antwort Natarajan Ganapathi
Es sind Unklarheiten in der Frage.
Was ist dein Eingangs-string? Ist es die gesamte Datei? Oder ist es 1 Zeile zu einem Zeitpunkt? Einige der Antworten sind unter der Annahme der letzteren. Ich möchte eine Antwort auf die ehemaligen.
Was möchten Sie nach Ihrer regulären Ausdruck? Die Tatsache, dass Sie wollen ein true /false, ob ein match gemacht wurde? Oder wollen Sie, extrahieren Sie die gesamte Zeile, deren Anfang beginnt mit CTR? Ich werde dir Antworten wollen nur einen true /false-match.
Um dies zu tun, wir brauchen nur zu bestimmen, wenn die CTR erfolgt entweder vom Anfang der Datei, oder direkt im Anschluss eine neue Zeile.
InformationsquelleAutor der Antwort Stephen Quan