Ich habe meine Regular Expression /'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
und mein Testcode ('He said, "You're cool."' , 'Rawr')
(My Test-Code simuliert in eine Funktion Parameter übergeben werden.)
Ich werde meine Reguläre Ausdrücke erklären, wie ich es und hoffentlich ein paar von euch verstehen kann etwas Licht auf mein Problem werfen.
1) /'
am Anfang des angepassten String bedeutet, es muss '
2) (.*)
Mittel erfassen alle Zeichen außer \n
0 oder mehrmals
3) (?:(?:4)|(?:5))
Mittel erfassen nicht aber versuchen, tun Schritt 4 und wenn es nicht versuchen, Schritt 5
4) (?:'\s*,\s*)
Mittel erfassen nicht funktioniert, aber es braucht eine '
mit 0 oder mehr Leerzeichen durch ein ,
mit 0 oder mehr Leerzeichen gefolgt sein
5) (?:'\))
Mittel erfassen nicht, aber es braucht ')
So scheint es sein, dass sie zurückkommen sollte (und das ist, was ich will):
'
+ He said, "You're cool."
+ ' ,
Aber es gibt:
'
+ He said, "You're cool."' , 'Rawr
+ ')
Wenn ich meinen Testcode ('He said, "You're cool."' , 'Rawr'
(kein Ende Klammern) ändern sie es zurück, was ich will, aber sobald ich die letzte Klammer hinzu, so scheint es, dass mein OR-Operator tut, was es will. Ich möchte, dass es zuerst prüft, ob es ein Komma gibt, und breche dort, wenn es ein Komma gibt, und wenn es keine Überprüfung auf eine Klammer gibt.
Ich habe versucht, die Spots von Schritt 4 und Schritt 5 zu wechseln, aber immer noch scheint der OR-Operator standardmäßig auf die (?:'\))
Seite. Wie kann ich den kürzesten möglichen Betrag erreichen?RegExp - Wie kann ich den kürzesten möglichen Betrag erreichen?
8
A
Antwort
15
Ich glaube nicht, dass Ihr Problem der Operator OR ist, aber die greediness der .*
. Es entspricht Ihrer vollständigen Zeichenfolge und dann zurück -track, bis die folgenden Ausdrücke übereinstimmen. Die erste Übereinstimmung in diesem Backtracking-Prozess wird 'He said, "You're cool."' , 'Rawr
+ ')
sein. Versuchen Sie .*?
stattdessen!
Verwandte Themen
- 1. Dijkstra-Algorithmus findet alle möglichen kürzesten Wege
- 2. Javascript regexp für Betrag und Währung
- 3. Kann ich den kürzesten Pfad von Dijkstra verwenden?
- 4. Finde den kürzesten Teilstring
- 5. Wie kann ich die beste Empfindlichkeit für den Benutzerstandort erreichen?
- 6. Python: Wie kann man die Anzahl aller möglichen kürzesten Pfade optimieren?
- 7. Wie bearbeite ich den betrag für die bezahlung?
- 8. Wie kann ich dieses Layout CSS erreichen
- 9. Wie kann ich android fab Kurzwahlwähler erreichen?
- 10. eine Liste von Punkten Neuordnen den kürzesten Abstand zwischen ihnen
- 11. Ich kann watchdog.servicebus.appfabriclabs.com nicht erreichen.
- 12. Kann den Java Script-Ordner nicht erreichen
- 13. Wie kann ich den Benutzer nach der Kontonummer und dem einzuzahlenden Betrag in der Laufeinzahlungsmethode fragen
- 14. Wie kann ich den freien Speicher in Linux absichtlich um einen bestimmten Betrag reduzieren?
- 15. Den kürzesten Weg in einem Labyrinth finden
- 16. Kann ich dieses Layout in Xaml erreichen?
- 17. Den kürzesten Pfad mit FGL finden
- 18. Berechne den Betrag der fälligen Änderung
- 19. Wie verwende ich RegExp Replace, um den Satz zu ersetzen?
- 20. Wie kann man mit Tinkerpop 3 den kürzesten Weg zwischen Vertices finden, aber die Suchtiefe einschränken?
- 21. Wie kann ich das unten stehende SettingWithCopyWarning erreichen?
- 22. RegExp Zählsystem
- 23. Wie finde ich den kürzesten Pfad, der alle Knoten in einem gerichteten zyklischen Graphen abdeckt?
- 24. Wie kann ich einen Knoten erreichen, der alles darunter entsättigt?
- 25. Kann Lazarus nichts erreichen?
- 26. Codename eins, Wie kann ich diese Benutzeroberfläche erreichen?
- 27. Wie kann ich Panelüberlappung in CSS/Bootstrap erreichen?
- 28. Wie kann ich diese Javascript-Highlighting-Technik erreichen?
- 29. Wie kann ich diese Abfrage in MySQL erreichen
- 30. Wie kann ich diesen Flash-Effekt mit jQuery erreichen?
Der Anfang der Zeichenfolge wäre '/ ^', nicht '/', fwiw. Persönlich bin ich nicht überzeugt, dass ich eine Regex für das verwenden würde, was Sie versuchen zu tun, sondern eher einen kleinen Parser. Verwirrende Regex ist verwirrend. –
@DaveNewton - Ja, das weiß ich. Deshalb habe ich am Anfang der Matched-Saite gesagt. Vielleicht hätte ich am Anfang des übereinstimmenden Teils der Saite sagen sollen. Oder wenn es das Match startet, muss es mit einem '' 'beginnen. – Aust