Das Größer-als-Symbol ist in der "Symbol, Math" category, nicht die Interpunktionskategorie. Sie können das sehen, wenn Sie die Codierung der Regex zwingen, UTF-8 (wird standardmäßig die Quellencodierung und vermutlich Ihre Quelle ist UTF-8 codiert, während meine Standardquelle etwas anderes ist):
2.1.2 :004 > /[[:punct:]]/u =~ '<'
=> nil
2.1.2 :005 > /[[:punct:]]/ =~ '<'
=> 0
Wenn Sie zwingen Sie die Regex auf ASCII-Codierung (/ n - mehr Optionen here) Sie sehen es kategorisieren "<" in punct, was ich denke, was Sie wollen. Dies führt jedoch wahrscheinlich zu Problemen, wenn Ihre Quelle Zeichen außerhalb der ASCII-Untermenge von UTF-8 enthält.
2.1.2 :009 > /[[:punct:]]/n =~ '<'
=> 0
Eine bessere Lösung, um die 'Symbol' Kategorie statt in Ihrem regulären Ausdruck anstelle des 'punct' ein, zu verwenden, wäre die '<' entspricht in Codierung UTF-8:
2.1.2 :012 > /\p{S}/u =~ '<'
=> 0
Es gibt eine längere Liste von Kategorien here.
Meine Glibc-Dokumentation besagt, dass '[[: punct:]]' mit allem übereinstimmen sollte, was 'wctype (3)' ein Interpunktionszeichen aufruft; Die 'ispunct (3)' Seite sagt '' prüft auf jedes druckbare Zeichen, das kein Leerzeichen oder ein alphanumerisches Zeichen ist.' Das scheint ziemlich explizit zu sein. – sarnold
[Rubys RE-Engine ist allerdings etwas Besonderes] (http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt) - es gibt Dokumentation zu Unicode-Case und Nicht-Unicode-Case für die ' punct' Klasse. Ich bin mir noch nicht sicher, was das konkret bedeutet, aber ich hoffe, das hilft. – sarnold