Ich verwende das folgende Muster (?<=<)(?<!>).*?q.*?(?!<)(?=>)
, das positive und negative Lookahead und Lookbehind verwendet, um das Literal , das in übereinstimmenden Klammern eingeschlossen ist, zu entsprechen. C++ RegEx unterstützt nicht hinter Lookhed, was wäre eine gute Alternative? Vielen Dank!Was ist eine Alternative für Lookbehind mit C++ RegEx?
Antwort
Beachten Sie, dass (?<=<)(?<!>)
-(?<=<)
gleich ist (da ein <
unmittelbar links von der aktuellen Position erforderlich ist, kann es keine >
sein) und (?!<)(?=>)
gleich (?=>)
(gleiche Logik gilt auch hier, wie >
sofort sein muss das Recht, es wird keine geben <
). Die erste .*?
wird nicht die kürzeste Teilzeichenfolge möglich, es wird buchstäblich seinen Weg zum ersten q
finden, die mit allen Zeichen 0+ bis zum ersten >
gefolgt wird. So funktioniert das Muster selbst im Lookbehind-unterstützenden Motor kaum.
ich eher <([^<>q]*q[^<>]*)>
regex mit Erfassung Gruppe und wörtliche raubend <
und >
Symbole am Anfang/Ende des Ausdrucks verwenden würde: abq
:
std::regex r("<([^<>q]*q[^<>]*)>");
std::string s = "<adqsdq<><abc>5<abq>6<qaz> <hjfffffffk>";
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
i != std::sregex_iterator();
++i)
{
std::cout << (*i).str(1) << srd::endl;
}
die C++ demo
Ausgang Siehe und qaz
Dank Wiktor, Problem mit Ihrem Regex ist, dass es nicht berücksichtigt das Vorhandensein einer anderen Klammer so zum Beispiel "
OK, verwenden '<([^<> q] * q [^ <>] *)>'. [Deine Regex hat das nicht berücksichtigt] (https://regex101.com/r/EbY5ld/1). –
Überprüfen Sie die Antwort jetzt, ich habe es mit einer Regex aktualisiert, die nicht mit der von Ihnen angegebenen Zeichenfolge übereinstimmt. –
- 1. Javascript Regex Lookbehind Alternative
- 2. Negativ Lookbehind alternative
- 3. RegEx Javascript Positive Lookbehind
- 4. Negativ Lookbehind in regex
- 5. PHP Regex negative Lookbehind variabler Länge Alternative Ausgabe
- 6. RegEx Advanced: Positiver Lookbehind
- 7. Regex Splitting mit negativem Lookbehind
- 8. Python Regex Lookbehind Inkonsistenz?
- 9. Regex Lookbehind mit 1 oder mehr Zahlen
- 10. Regex Lookbehind js
- 11. Python Regex Negative Lookbehind
- 12. Vorwärtsreferenz mit einem Lookbehind C#?
- 13. Java RegEx negativen Lookbehind
- 14. Regex Reverse Lookbehind
- 15. Gibt es eine kompaktere Regex für diesen Lookbehind?
- 16. Java-Regex-Lookbehind-Problem mit Quantifizierern
- 17. .NET Regex Lookbehind Nicht Gierig
- 18. Was ist die alternative Methode für Diag (k) in C++?
- 19. Wie beide Look-Ahead-Lookbehind regex python
- 20. Lookbehind Assertion Regex in Atom Editor
- 21. Javascript Regex - negative Lookbehind und Lookahead
- 22. Was ist eine Alternative zum "funktionalen" Paket für den Funktionszusammensetzungsvorgang?
- 23. Was ist Regex für Währungssymbol?
- 24. Was ist die alternative Lösung für PaymentWithProductIdentifier?
- 25. Regex - Kombination von positivem und negativem Lookbehind
- 26. Wie erreichen Sie Lookbehind Regex in Javascript?
- 27. Was ist die beste Alternative für QueryString
- 28. Was ist eine gute Alternative für openinviter in Django
- 29. Was ist eine Alternative für die veraltete setProps() in React.js?
- 30. Was ist eine Alternative für die Verwendung von com.nineoldandroids Bibliothek
Es ist ein sehr seltsames Muster, das nicht funktioniert, wenn es mehrere 'gibt'Teilstrings in der gleichen Zeile. Wenn Sie diese Regex noch benötigen, verwenden Sie '<(.*?q.*?)>' und greifen Sie auf 'smatch_obj.str (1)'. '<([^> q] * q [^>] *)>' wird jedoch besser und genauer sein. –
"Boost" unterstützt, dass –