2013-07-15 6 views
5

Wie verwende ich die ^ und $ Symbole im folgenden nur zu analysieren /blog/articles?

Ich habe ex3.txt erstellt, die diese enthält:

/blog/article/1 
/blog/articles 
/blog 
/admin/blog/articles 

und die Regex:

^/blog/articles$ 

scheint nicht zu funktionieren, wie in, wenn ich es geben mit 'regetron' (see learning regex the hard way) Es gibt keine Ausgabe in der nächsten Zeile.

Das ist meine genaue Vorgehensweise:

  1. auf der Kommandozeile in dem richtigen Verzeichnis, I-Typ: regetron ex3.txt. ex3.txt enthält eine Zeile mit dem folgenden:

    /Blog/article/1/Blog/Artikel/blog/admin/Blog/Artikel

obwohl ich es mit Zeilenumbrüchen zwischen den Einträgen versucht habe.

  1. Ich tippe ^/blog/article/[0-9]$ ein und in der nächsten Zeile wird nichts zurückgegeben.

  2. Ich versuche die erste veröffentlichte Lösung, ^\/blog\/articles$ und nichts zurückgegeben wird.

Vielen Dank im Voraus SOers!

+1

In welcher Sprache wird Ihre Regex verwendet? – zzzzBov

+0

Welches Sprachwerkzeug verwenden Sie? – Anirudha

+0

Probieren Sie diese Regex: '^ \/blog \/articles * $' – anubhava

Antwort

1

Basierend auf Ihrem Update, es klingt wie ^ und $ möglicherweise nicht die richtigen Betreiber für Sie. Diese entsprechen jeweils dem Anfang und dem Ende einer Zeile. Wenn Sie mehrere Zeichenfolgen, die Sie auf der gleichen Linie passen wollen, dann werden Sie etwas mehr wie diese brauchen:

(?:^|\s)(\/blog\/articles)(?:$|\s)

Was das bedeutet:

(?:^|\s)   Matches, but does not capture (?:), a line start (^) OR (|) a whitespace (\s) 
(\/blog\/articles) Matches and captures /blog/articles. 
(?:$|\s)   Matches, but does not capture (?:), a line end ($) OR (|) a whitespace (\s) 

Dies wird für beide arbeiten Fälle, aber beachten Sie, dass es vor und nach /blog/articles übereinstimmen wird (aber nicht erfasst) bis zu einem einzelnen Leerzeichen.

5

Ihre regex ändern:

^\/blog\/articles$ 

Sie benötigen eine Schrägstriche zu entkommen.

Stellen Sie außerdem sicher, dass in der Datei ex3.txt keine abschließenden Leerzeichen am Ende jeder Zeile vorhanden sind.

+2

Funktioniert für mich, ohne sie zu entkommen: 'perl -Esay 1 if"/Blog/Artikel "= ~ m [^/Blog/Artikel $] ' '. – Quentin

+0

Ah, ich habe die nachfolgenden Leerzeichen nicht überprüft. Mach das so schnell wie möglich! – goldisfine

+0

@Quentin Es hängt davon ab, was die Regex analysiert.Schrägstriche mit Schrägstrich bedeuten in der Regel etwas in regex (zB: '/ hallo/gi', um eine globale Groß-/Kleinschreibung nach dem Wort 'Hallo' zu suchen) –

Verwandte Themen