Sie benötigen für einen „\\“ (Backslash) in dieser Reg Ex zu testen

stimmen
0

Derzeit verwende ich diese reg ex:

\bI([ ]{1,2})([a-zA-Z]|\d){2,13}\b

Es wurde nur darauf aufmerksam gemacht , dass der Text, den ich diesen gegen verwenden , um einen „enthalten könnte \“ (Schrägstrich). Wie füge ich dies zum Ausdruck?

Veröffentlicht am 10/12/2008 um 01:23
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
2

In |\\innerhalb der Gruppe, nach der \dzum Beispiel.

Beantwortet am 10/12/2008 um 01:26
quelle vom benutzer

stimmen
1

Dieser Ausdruck kann vereinfacht werden, wenn Sie auch den Unterstrich in dem zweiten Erfassungsregister ermöglicht, und Sie sind bereit, Metazeichen zu verwenden. Das ändert sich dies:

([a-zA-Z]|\d){2,13}

das mögen ...

([\w]{2,13})

und Sie können auch einen Test für den umgekehrten Schrägstrich mit diesem Add ...

([\w\x5c]{2,13})

wodurch die Regex nur ein bisschen leichter Augapfel, je nach Ihren persönlichen Vorlieben.

"\bI([\x20]{1,2})([\w\x5c]{2,13})\b"

Siehe auch:

Beantwortet am 10/12/2008 um 01:36
quelle vom benutzer

stimmen
0

Wie ich in meinem Kommentar zu Slavy der Post wies darauf hin, \\-> \bals ein Backslash ist kein Wortzeichen. Also mein Vorschlag ist ,

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?:[^\w\\]|$)/ 

Ich nahm an, dass Sie die ganzen 2-13 Zeichen, nicht nur die ersten, das gilt, so dass ich meine angepasst RE einfangen wollten.

Sie können die letzten Erfassung eines machen Look - Ahead , wenn der Motor unterstützt wird und Sie nicht wollen , es zu konsumieren. Das würde wie folgt aussehen:

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?=[^\w\\]|$)/ 
Beantwortet am 10/12/2008 um 05:44
quelle vom benutzer

stimmen
0

Sowohl @ slavy13 und @dreftymac gibt Ihnen die Basislösung mit Zeigern, aber ...

  • Sie können verwendet werden \dinnerhalb einer Zeichenklasse , um eine Ziffer zu bedeuten.
  • Sie brauchen nicht leer in eine Zeichenklasse um es zu entsprechen (außer vielleicht für Klarheit, obwohl das umstritten ist).
  • Sie können verwendet werden [:alpha:]innerhalb einer Zeichenklasse einen Alpha - Zeichen bedeuten, um [:digit:]eine Ziffer zu bedeuten, und [:alnum:]eine alphanumerische bedeuten (insbesondere ohne Unterstrich, im Gegensatz zu \w). Beachten Sie, dass diese Charakterklassen könnten mehr Zeichen bedeuten , als Sie erwarten; denken von Zeichen mit Akzent und nicht-arabische Ziffern, vor allem in Unicode.
  • Wenn Sie die Gesamtheit der Informationen nach dem Raum erfassen möchten, müssen Sie die Wiederholung innerhalb der einfangenden Klammern.

Kontrast, das Verhalten dieser beiden Einzeiler:

perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]){2,13}\b/'

perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]{2,13})\b/'

Die Eingabezeile „gegeben I a123“, die ersten Drucke „3“ und die zweite druckt „a123“. Selbstverständlich, wenn alles , was Sie das letzte Zeichen des zweiten Teils der Saite war wollten, dann wird der ursprüngliche Ausdruck ist in Ordnung. Das ist jedoch unwahrscheinlich , dass die Anforderung sein. (Natürlich, wenn Sie sich für die ganze Menge sind, dann mit ‚ $&‘ gibt Ihnen den gefundenen Text, aber es hat negative Auswirkungen Effizienz.)

Ich würde wahrscheinlich diese Regex verwenden, da es klarste mir scheint:

m/\bI( {1,2})([[:alnum:]\\]{2,13})\b/

Zeit für den obligatorischen Stecker: liest Jeff Friedl „ Reguläre Ausdrücke “.

Beantwortet am 10/12/2008 um 02:37
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more