Natürlich ist es möglich, mit regex! Sie fragen nicht nach verschachtelten Klammern! : P
Aber ja, das ist die Art von Dingen, für die reguläre Ausdrücke gebaut wurden. Ein Beispiel:
@ss
as$
a$s
@$s
a$$
@s$
@$$
Es wird nicht Spiel dies:
ass
Was ich glaube, ist, was Sie wollen
/\S*[^\w\s]+\S*/
Dies wird mit allen folgenden entsprechen. Wie es funktioniert:
\S*
entspricht 0 oder mehr Leerzeichen. [^\w\s]+
stimmt nur mit den Symbolen überein (entspricht allem, was kein Wort oder Leerzeichen ist) und stimmt mit einem oder mehreren von ihnen überein (ein Symbolzeichen ist also erforderlich). Dann entspricht \S*
wieder 0 oder mehr Leerzeichen (Symbole und Buchstaben).
Wenn ich eine bessere Strategie vorschlagen kann, können Sie in Perl eine Regex in einer Variablen speichern.Ich weiß nicht, ob Sie dies in PHP tun, aber wenn Sie können, können Sie eine Liste von Variablen wie so konstruieren:
$a = /[[email protected]]/ # regex that matches all a-like symbols
$b = /[bB]/
$c = /[cC(]/
# etc...
Oder:
$regex = array('a' => /[[email protected]]/, 'b' => /[bB]/, 'c' => /[cC(]/, ...);
So Auf diese Weise können Sie match "Freund" in all seinen Permutationen mit:
/$f$r$i$e$n$d/
Oder:
/$regex['f']$regex['r']$regex['i']$regex['e']$regex['n']$regex['d']/
Zugegeben, die zweite sieht unnötig aus, aber das ist PHP für Sie. Ich denke, die zweite ist wahrscheinlich die beste Lösung, da sie alle in einem Hash gespeichert werden, anstatt alle als separate Variablen, aber ich gebe zu, dass die Regex, die es erzeugt, ein bisschen hässlich ist.
Super Regex + Erklärung +1! Btw, Regex in PHP ist in Strings gespeichert, so dass variable Permutationen wie Sie vorschlagen, sicherlich möglich ist. –
Eigentlich könnte es interessant sein, das in eine Funktion zu schreiben. Übergeben Sie ein normales Wort und es würde mit der richtigen Regex antworten, um dieses Wort zu erkennen. Das einzige Problem, das ich sehen konnte, ist etwas wie W = \/\/oder irgend ein Multi-Zeichen. –
W =! (?: [WW] | \\/\\ /)! (in meiner Muttersprache Perl). Es wäre schwieriger für Dinge wie W mit Multi-Charakter-Matches, aber sicherlich möglich. Eine Funktion könnte einfach geschrieben werden, die Zeichen für Zeichen durchläuft und eine Regex nachstellt, die zu diesem Zeichen passt, und sie dann zu einem riesigen (schrecklich aussehenden) Regex zusammenfügt, mit dem Sie diese abgleichen können Wort. Allerdings verwende ich PHP nicht oft genug, um es zu tun. Ich könnte es in Perl tun, wenn die Laune mich trifft. Oder was auch immer dieser Ausdruck sein soll. –