2009-04-05 10 views
2

Ich brauche 2 einfachen reg EXPS eingeschlossen Übereinstimmen, die wird:Regulärer Ausdruck Strings in eckigen Klammern oder doppelte Anführungszeichen

  1. Spiel, wenn eine Zeichenfolge in eckigen Klammern enthalten ist ([] zB [word])
  2. Spiel, wenn Zeichenfolge ist
+0

Ich habe nicht downvote, aber es war * sehr verlockend, nur mit RTFM und einem Downvote zu antworten. Wenn Sie zukünftige Downvotes vermeiden möchten, lesen Sie http://www.catb.org/~esr/faqs/smart-questions.html und sehen Sie, ob Sie alle Fehler, die Sie mit Ihrer Frage gemacht haben, erkennen und vermeiden können wiederhole sie das nächste Mal. :) –

Antwort

13
\[\w+\] 

"\w+" 
in doppelte Anführungszeichen (zB "" "word") enthalten


Erläuterung:

Die Zeichen \ [und \] geben die Sonderzeichen der Klammer zurück, die ihren Literalen entsprechen.

Die \ w bedeutet "jedes Wort Zeichen", in der Regel gleich wie alphanumerische oder Unterstreichung.

Das + bedeutet eines oder mehrere der vorhergehenden Elemente.

Die "sind wörtliche Zeichen


HINWEIS:.. Wenn Sie die gesamte Zeichenfolge Matches (und nicht nur einen Teil davon), Präfix mit ^ und Suffix mit $ sicherstellen wollen,


Und das nächste Mal sollten Sie in der Lage sein, dies selbst zu beantworten, indem Sie lesen regular-expressions.info

Update:

Ok, also basierend auf Ihrem Kommentar, was Sie scheinen wissen zu wollen, wenn das erste Zeichen [und die letzten] oder wenn die ersten und die letzt beide "?
Wenn ja, werden diese mit denen übereinstimmen:

^\[.*\]$ (or ^\\[.*\\]$ in a Java String) 

"^.*$" 

Allerdings, wenn Sie mit den Mittel Zeichen eine besondere Prüfung tun müssen, einfach tun:

if (MyString.startsWith("[") && MyString.endsWith("]")) 

und

if (MyString.startsWith("\"") && MyString.endsWith("\"")) 

Was ich vermute, wäre schneller als eine Regex.

+0

Ich musste dies in^\\\ [\\ w + \\\] $ ändern, damit es in Java funktioniert, ohne Kompilierfehler zu bekommen. Wird es funktionieren? –

+0

Sie haben die Regex nicht geändert, also wird es immer noch funktionieren - Sie haben nur die Zeichenfolgendarstellung geändert, weil Backslashes in Java beim Definieren von Zeichenfolgen ausgeführt werden müssen. –

+0

Auch: "Wird es funktionieren?" - Probier es aus und finde es heraus !!! –

0

Sind das zwei getrennte Ausdrücke?

[[A-Za-z] +]

\ "[A-Za-z] + \"

wenn sie in einem einzigen Ausdruck:

[[\“ ] + [a-zA-Z] + [] \ "] +

Denken Sie daran, dass in.net Sie die doppelten Anführungszeichen "durch‚‘

+0

Ich kann sehen, dass dies nur mit Alphabeten funktioniert, können Sie es ändern, so dass es mit allen Zeichen, alphanumerischen und funktioniert besonders, solange sie zwischen eckigen Klammern oder doppelten Anführungszeichen standen? –

2

Wichtige Fragen entkommen müssen, dass diese schwer/unmöglich in einem regex machen kann:

  1. Kann [] verschachtelt (zB [foo [bar]]) werden Wenn ja, dann kann eine traditionelle regex Ihnen nicht helfen. Perls erweiterte reguläre Ausdrücke können, aber es ist wahrscheinlich besser, einen Parser zu schreiben.

  2. kann [, ] oder " entkam erscheinen (zB "foo said \"bar\"") im String? Wenn ja, siehe How can I match double-quoted strings with escaped double-quote characters?

  3. Ist es möglich, dass mehr als eine Instanz in der Zeichenfolge vorhanden ist, die Sie abgleichen? Wenn ja, möchten Sie wahrscheinlich den nicht-gierigen Quantor Modifikator verwenden (dh ?) die kleinste Zeichenfolge zu erhalten, die passt: /(".*?"|\[.*?\])/g

Basierend auf Kommentare, Sie scheinen die Dinge passen zu wollen, wie "this is a "long" word"

#!/usr/bin/perl 

use strict; 
use warnings; 

my $s = 'The non-string "this is a crazy "string"" is bad (has own delimiter)'; 

print $s =~ /^.*?(".*").*?$/, "\n"; 
Verwandte Themen