Warum haben PHP Regexes die umgebenden Delimiter? Es scheint, dass es klarer wäre, wenn irgendwelche Mustermodifikatoren als ein Parameter an irgendeine Funktion übergeben würden, die verwendet wurde.PHP Regex Delimiter, was ist der Sinn?
Antwort
Es gibt keinen technischen Grund, warum es so sein muss.
Wie in einem Kommentar erwähnt, erfordert die zugrunde liegende Bibliothek nicht, dass Flags als Teil der Regexp übergeben werden - tatsächlich muss die Erweiterung diese streichen und sie als separates Argument übergeben.
Es sieht so aus, als ob der ursprüngliche Implementierer versucht hat, es wie grep/sed/awk/perl/etc aussehen zu lassen, damit es Programmierern, die von diesen Tools kommen, vertrauter ist.
Der Grund für das Trennzeichen ist das Setzen von Flags nach dem Muster. Eventuell können Flags als separater Parameter übergeben werden (Java kann das auch), aber so hat es Perl ursprünglich gemacht (und sed/awk/vi davor), so wie es jetzt gemacht wird.
Verwenden Sie keine Schrägstriche: Sie sind zu häufig. Persönlich benutze ich fast immer das! Charakter. Ich suche kaum danach.
Hinweis: Java kann auch Flags innerhalb des Regexp enthalten, zu Beginn (? M) zum Beispiel für mehrere Zeilen. (? s) für dotall, (? ms) für beide und so weiter. – VonC
@VonC, so kann Python. –
So können Perl, PCRE und sogar PHP's Preg funktionieren. Aber die Preg-Funktionen haben einige zusätzliche Flags, die nur nach der Regex angegeben werden können. –
Ich weiß nicht, was die Motive der Entwickler der Preg-Funktionen waren. Der einzige Grund, an den ich denken kann, ist, dass sie etwas zu hart versuchten, Dinge auf Perl-Art zu machen.
Während die Trennzeichen ermöglichen Flags zusammen mit der Regex als ein Parameter angegeben werden, ist die Angabe der Flags als separater Parameter viel sauberer. Das ist, wie jede andere Bibliothek für reguläre Ausdrücke (für Sprachen, die keine literalen Regexes als Sprachfunktion unterstützen), weiß ich es, einschließlich der PCRE-Bibliothek, auf der die Preg-Funktionen von PHP basieren. Der Preg-Code muss in der Tat die Mühe machen, die Regex-Begrenzer aus der Zeichenkette mit Ihrer Regex zu entfernen, bevor er an PCRE übergeben werden kann.
- 1. Also: was ist der Sinn?
- 2. Was ist der Sinn der Tabelle cataloginventory_stock_status_idx?
- 3. HTML DTDs - was ist der Sinn?
- 4. Was ist der Sinn von FILL_AND_STROKE?
- 5. Was ist der Sinn von XPS?
- 6. Was ist der Sinn von Python-Eizellen?
- 7. Was ist der Sinn von Paketannotationen?
- 8. Was ist der Sinn von setArguments?
- 9. C# Namespace Alias - was ist der Sinn?
- 10. Was ist der Sinn des NOT-Operators?
- 11. Was ist der Sinn eines "einfachen" Anfangsblocks?
- 12. Was ist der Sinn von Aclocal?
- 13. Javascript: Was ist der Sinn von RegExp.compile()?
- 14. Was ist der Sinn von make_heap?
- 15. Was ist der Sinn von VkApplicationInfo?
- 16. Was ist der Sinn von CSS-Minimierungsmargen?
- 17. Was ist der Sinn von object.presence?
- 18. Was ist der Sinn von setRetainsRegisteredObjects :?
- 19. Was ist der Sinn dieses bitweisen XOR?
- 20. Was ist der Sinn des ActionResult-Rückgabetyps?
- 21. Was ist der Sinn von STL?
- 22. XAML - Was ist der Sinn (tippen) es?
- 23. Was ist der Sinn von iter_swap?
- 24. Thread.interrupt() in Java: Was ist der Sinn?
- 25. , was der Unterschied zwischen PHP Regex ist und Javascript regex
- 26. C++ Regex Ausdruck Token Delimiter
- 27. Was ist das eingebettete Ruby Delimiter? -%>
- 28. PHP geschweifte Klammer, was in diesem Code ist Sinn
- 29. Was ist der Sinn von GLSL, wenn OpenCL vorhanden ist?
- 30. Was ist der Sinn des Tun window.undefined = ist window.undefined
PCRE lässt die umgebenden Begrenzer überhaupt nicht zu. Die PHP-Preg-Funktionen streichen sie aus, bevor sie an die PCRE-Bibliothek übergeben werden. –
wow, dann ist das alles nur ein Versuch, Perl zu sein? Ich habe die Syntax seit Jahren verzeihen, aber jetzt kann ich es wirklich hassen. Vielen Dank! – Cal
Diese Antwort ist gut für die persönliche Meinung, aber es ist nicht korrekt. – dreftymac