Suche…


Syntax

  • Regex ("[Regex]")
  • r "[Regex]"
  • Streichholz (Nadel, Heuhaufen)
  • Matchall (Nadel, Heuhaufen)
  • Eachmatch (Nadel, Heuhaufen)
  • Ismatch (Nadel, Heuhaufen)

Parameter

Parameter Einzelheiten
needle die Regex im haystack suchen
haystack der Text, in dem nach der needle

Regex-Literale

Julia unterstützt reguläre Ausdrücke 1 . Die PCRE-Bibliothek wird als Regex-Implementierung verwendet. Regexe sind wie eine Minisprache innerhalb einer Sprache. Da die meisten Sprachen und viele Texteditoren Unterstützung für reguläre Ausdrücke bieten, sind Dokumentation und Beispiele für die Verwendung von regulärer Expression im Allgemeinen nicht in diesem Beispiel enthalten.

Es ist möglich, eine Regex mithilfe des Konstruktors aus einer Zeichenfolge zu Regex :

julia> Regex("(cat|dog)s?")

Der @r_str kann jedoch das @r_str String-Makro verwendet werden:

julia> r"(cat|dog)s?"

1 : Technisch unterstützt Julia Ausdrücke, die sich von den in der Sprachtheorie genannten regulären Ausdrücken unterscheiden. Häufig wird der Begriff "regulärer Ausdruck" auch für Regex verwendet.

Übereinstimmungen finden

Es gibt vier Hauptfunktionen für reguläre Ausdrücke, die alle Argumente in needle, haystack annehmen. Die Begriffe "Nadel" und "Heuhaufen" stammen aus der englischen Redewendung "Nadel im Heuhaufen finden". Im Zusammenhang mit Regex ist der Regex die Nadel und der Text der Heuhaufen.

Die match Funktion kann verwendet werden, um die erste Übereinstimmung in einer Zeichenfolge zu finden:

julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")

Mit der matchall Funktion können Sie alle Übereinstimmungen eines regulären Ausdrucks in einem String suchen:

julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
 "cat" 
 "dogs"

Die ismatch Funktion gibt einen Booleschen ismatch zurück, der angibt, ob eine Übereinstimmung in der Zeichenfolge gefunden wurde:

julia> ismatch(r"(cat|dog)s?", "My pigs")
false

julia> ismatch(r"(cat|dog)s?", "My cats")
true

Die eachmatch Funktion gibt einen Iterator über RegexMatch Objekte zurück, die für for Schleifen geeignet sind :

julia> for m in eachmatch(r"(cat|dog)s?", "My cats and my dog")
           println("Matched $(m.match) at index $(m.offset)")
       end
Matched cats at index 4
Matched dog at index 16

Gruppen erfassen

Auf die von Capture-Gruppen erfassten RegexMatch kann von RegexMatch Objekten mithilfe der Indexierungsnotation RegexMatch werden.

Beispielsweise analysiert der folgende Regex nordamerikanische Telefonnummern, die im (555)-555-5555 Format geschrieben wurden:

julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"

Angenommen, wir möchten die Telefonnummern aus einem Text extrahieren:

julia> text = """
       My phone number is (555)-505-1000.
       Her phone number is (555)-999-9999.
       """
"My phone number is (555)-505-1000.\nHer phone number is (555)-999-9999.\n"

Mit der matchall Funktion können wir ein Array der Teilzeichenfolgen selbst erhalten:

julia> matchall(phone, text)
2-element Array{SubString{String},1}:
 "(555)-505-1000"
 "(555)-999-9999"

Angenommen, wir möchten auf die Vorwahlnummern (die ersten drei Ziffern, in Klammern eingeschlossen) zugreifen. Dann können wir den eachmatch Iterator verwenden:

julia> for m in eachmatch(phone, text)
           println("Matched $(m.match) with area code $(m[1])")
       end
Matched (555)-505-1000 with area code 555
Matched (555)-999-9999 with area code 555

Beachten Sie hierbei, dass wir m[1] da die Vorwahl die erste Erfassungsgruppe in unserem regulären Ausdruck ist. Wir können alle drei Komponenten der Telefonnummer über eine Funktion als Tupel abrufen:

julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)

Dann können wir eine solche Funktion auf ein bestimmtes RegexMatch :

julia> splitmatch(match(phone, text))
("555","505","1000")

Oder wir könnten map es in jedem Spiel:

julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
 ("555","505","1000")
 ("555","999","9999")


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow