Was hat das Perl-regex bedeutet: m/(.*?):(.*?)$/g?
Bin ich die Bearbeitung einer Perl-Datei, aber ich versteh das nicht-regexp-Vergleich. Kann jemand bitte erklären Sie es mir?
if ($lines =~ m/(.*?):(.*?)$/g) { } ..
Was passiert hier? $lines
ist eine Zeile aus einer text-Datei.
Sieht aus wie erste
Nicht immer. Es werde mit allen Zeichen bis zum ersten Doppelpunkt.
(.*?)
entspricht immer auf eine leere Zeichenfolge.Nicht immer. Es werde mit allen Zeichen bis zum ersten Doppelpunkt.
InformationsquelleAutor perlnewb | 2010-09-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brechen Sie in Teile:
So, in diesem match zu Zeichenfolgen wie
":"
(es entspricht null-Zeichen, dann ein Doppelpunkt, dann null-Zeichen vor dem Ende der Zeile,$1
und$2
sind leere strings), oder"abc:"
($1 = "abc"
,$2
ist ein leerer string), oder"abc:def:ghi"
($1 = "abc"
und$2 = "def:ghi"
).Und wenn Sie eine Zeile, die nicht mit (es sieht aus wie dies wäre, wenn der string nicht enthalten einen Doppelpunkt), dann wird es nicht Prozess den code, der innerhalb der eckigen Klammern. Aber wenn es passt, dann wird der code innerhalb der Klammern können die Nutzung und Verarbeitung der speziellen
$1
und$2
Variablen (zumindest bis zum nächsten regulären Ausdrucks zeigt sich, wenn man innerhalb der eckigen Klammern).InformationsquelleAutor CanSpice
Es ist ein Werkzeug, um zu helfen, zu verstehen, regexes: YAPE::Regex::Explain.
Ignorieren die
g
modifier, die hier nicht notwendig ist:Siehe auch perldoc perlre.
InformationsquelleAutor toolic
Es wurde von jemandem geschrieben, der entweder weiß zu viel über reguläre Ausdrücke oder nicht genug über die
$'
und $` Variablen.Diese geschrieben worden sein könnte, als
oder
InformationsquelleAutor mob
Diese Zeile sagt, führen Sie einen regulären Ausdruck übereinstimmen, der auf
$lines
mit der regexm/(.*?):(.*?)$/g
. Es wird wirksam zurücktrue
wenn eine übereinstimmung gefunden werden kann, in$lines
undfalse
wenn man nicht gefunden werden kann.Einer Erklärung, die
=~
Betreiber:Die regex selbst ist:
Also, wenn
$lines
matches gegen regex, es wird in den bedingten Teil, sonst wird esfalse
und wird es zu überspringen.InformationsquelleAutor eldarerathis
(.*?)
erfasst alle Zeichen, aber so wenige von Ihnen wie möglich.So sieht es für Muster, wie
<something>:<somethingelse><end of line>
, und wenn es mehrere:
im string wird das erste verwendet werden, als Teiler zwischen<something>
und<somethingelse>
.InformationsquelleAutor Amber