Ich brauche Hilfe, um eine Regex, in PHP, um die Anzahl der Ausrufezeichen, die vor und nach einem Wort erscheinen, zu verfeinern. Wörter können in dieser Situation sind alle Zeichen außer einem Raum (sogar Ausrufezeichen), wie folgt (ich die erwartete „vor, nach“ zeige, zählt):PHP Regex - Anzahl der Ausrufezeichen vor und nach einem Wort
!!!!Hi!! => 4, 2
!!!!Hi => 4, 0
!Hi!!! => 1, 3
!easdf.kjaf!! => 1, 2
!hjdfa!sdfk!jaf!! => 1, 2
!,!!!!!fdgsdfg!!sdgj => 1, 0
!!!,!ksfgfdg!jkft!!! => 3, 3
Wie die Regex codieren, so dass, für die Vorher, hört es auf, nach fortlaufenden Ausrufezeichen zu suchen, wenn irgendein Nichtausrufezeichen erreicht wird, und fängt an, für das after zu zählen, wenn nur Ausrufezeichen übrig bleiben?
Der schwierige Teil ist, wenn Interpunktionszeichen innerhalb des Wortes erscheinen. Diese sollten ignoriert werden, diese werden als Teil des Wortes betrachtet.
Hier ist, wo ich bin:
preg_match_all('/(!*)\b(\S+)\b(!*)/', $w, $m);
$ w das Wort ist (wie oben dargestellt), wird $ m Array passende
Als Beispiel "!! Hallo!" würde in $ m entsprechen
Array
(
[0] => Array
(
[0] => !!Hi!
)
[1] => Array
(
[0] => !!
)
[2] => Array
(
[0] => Hi
)
[3] => Array
(
[0] => !
)
)
Das ist richtig und was ich suche. Wenn ein Interpunktionszeichen das Wort beginnt oder beendet, werden die Dinge jedoch abgeworfen. Der Regex-Anker "\ b" erkennt dies nicht als Teil des Wortes an (wie in dieser Übung definiert). Hier ist ein Beispiel für ein Fehler beim Parsen des Wortes "!!!!!!!! xd.sfgdx !!!, !!"
Array
(
[0] => Array
(
[0] => !!!!!!!!xd.sfgdx!!!
)
[1] => Array
(
[0] => !!!!!!!!
)
[2] => Array
(
[0] => xd.sfgdx
)
[3] => Array
(
[0] => !!!
)
)
Hilfe, bitte.
Start ist '^', Ende ist '$' –
Warum nicht einfach eine Liste von verbotenen Zeichen erstellen und eine str_replace ausführen, um die Dinge zu bereinigen, bevor die Fancy Regex ausgeführt wird? –