MudGuard: preg_split - "Splitinformationen" nicht verwerfen

Beitrag lesen

Hi,

ich stehe vor einem Problem, dass eigentlich banal zu lösen sein müsste.
Ich habe eine Text-Datei mit einem wie folgt strukturierten Inhalt:

"BEZEICHNUNG weiterer text und sonderzeichen BEZEICHNUNG weiterer text und sonderzeichen BEZEICHNUNG weiterer text und sonderzeichen BEZEICHNUNG weiterer text und sonderzeichen (...)"

Die Inhalte sind natürlich jeweils anders. Nun will ich einen String mit einem Array wie folgt:
1 => 'BEZEICHNUNG weiterer text und sonderzeichen'
2 => 'BEZEICHNUNG weiterer text und sonderzeichen'

Es gibt 2 offensichtliche Möglichkeiten:

1. Der vom RE gematchte Delimiter muß kein Zeichen sein, es reicht, wenn es eine Position ist.

2. preg_split erlaubt es, auch die Delimiter zurückzugeben (allerdings muß dazu auch die maximale Anzahl der Teile angegeben werden - int_max sollte aber gehen)

zu 1:

<?php  
$string = "ABC d ef GHI jkl MNO pqr STU vwx yz abc";  
$split = preg_split("/(?<=.)\b(?=(?:[A-Z]+\s+)+)/", $string);  
echo $string."\n";  
print_r($split);  
?>  

ergibt:
ABC d ef GHI jkl MNO pqr STU vwx yz abc
Array
(
    [0] => ABC d ef
    [1] => GHI jkl
    [2] => MNO pqr
    [3] => STU vwx yz abc
)

Zum Ausdruck /(?<=.)\b(?=(?:[A-Z]+\s+)+)/

(?<=.)
vor der Trennstelle muß mindestens ein Zeichen sein.
Ohne diesen RE-Teil ist der erste Split an Position 0, sprich: der erste Teil ist leer, die anderen wie gehabt.

\b es soll an einer Wortgrenze geteilt werden.

(?=(?:[A-Z]+\s+)+) Nach der Trennposition soll mindestens ein großgeschriebenes Wort stehen.

(keine Garantie auf Richtigkeit/Vollständigkeit der Lösung)

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.