String.Format für die Erstellung von regex-Muster
eine schnelle hand wäre sehr geschätzt werden.
Ich bin versucht, einen kleinen Algorithmus, der die Eingabe von text von einem Textfeld in ein regex-Ausdruck. Wie folgt:
string bar = String.Format(@"^{0}*(q*x|x*q)*", foo.Text);
die regex-Klasse übergeben, die bar variable oben und initialisiert, wenn das Ereignis ausgelöst wird. Jedoch, es gibt nur trifft, wenn es sich wiederholenden text. E. G bb in der textbox liefert alle Ergebnisse, die beginnen mit b, und 1b gibt Spiele, die auf jedes Wort.
??? gibt es etwas falsch mit meinem regex oder meine Logik? (oder beide! :P)
BEARBEITEN ich bin versucht zu entsprechen, eine Liste von strings aus einer Textdatei geladen. alle Worte, die beinhalten sowohl ein q und ein x mindestens einmal, beginnend mit den Buchstaben in das Textfeld ein. Beispiele:
arquifoux
benzofuroquinoxaline
benzoquinoxaline
disquixote
equiaxe
- Was wollen Sie erreichen? Bitte Lesen Sie tinyurl.com/so-hints
- Bitte die Zeichenfolge an, die Sie passend sind mit diesem regex.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie wollen
Den
.
entspricht einem beliebigen Zeichen.Das Fragezeichen in
.*?
macht einfach das match non-greedy (d.h. das " q " wird mit dem ersten q es findet), obwohl in Ihrem Fall sind Sie nicht wirklich nötig.Ihren früheren, 'q*', entspricht "0 oder mehr q-Zeichen".
Könnten Sie weiter zu verbessern Sie Ihr regex:
Das entspricht nur Kleinbuchstaben. (man konnte Sie füttern in der groß-und Kleinschreibung fahne zu Ihrem regex zu haben, Sie mit der in jedem Fall).
Ich bin mir ziemlich sicher, dass deine regex ist falsch.
Ich denke, dir fehlen einige Punkte (.) dort vor dem *'s
Wenn Sie brechen, was Sie haben:
^{0}*(q*x|x*q)*
ist zu sagen:Da Sie Sie bitten, für "0 oder mehr", es entspricht grundsätzlich nichts. Die Eingabe von "bb" erscheinen würde, zu arbeiten, da sonst die Start-regex:
^bb*
bricht ab zu:Ich denke, was Sie wollte, war:
Bricht ab zu:
Fehlende Spiele der regulären Ausdruck für Zeichen zwischen a-f und x ist. Nach übereinstimmenden Wort, Sie wollen, dass diese (\w statt . die Begrenzung auf Wort-Zeichen nur)
Wohl nicht erforderlich, hier für Sie hier, aber es ist gut zu verwenden Regex.Escape Escapezeichen Ihre Benutzer eingegebenen text vor dem einfügen direkt in eine regex-Anweisung
Diese sollte: