Sie nicht angegeben POSIX, PCRE oder einer anderen Regex, aber ich werde PCRE nehmen. Während regulärer Ausdruck nicht die Auswahl von "N-tes Vorkommen eines Zeichens" zulässt, können Sie immer das N-te Vorkommen einer Gruppe auswählen, wenn ein Muster vorhanden ist.
In Ihrem Fall, da Pipe ein Trennzeichen ist, können Sie immer eine Gruppe mit einem beliebigen Zeichen gefolgt von einer Pipe auswählen und dann diese Gruppe sechsmal auswählen und dann bis zur nächsten Pipe auswählen, um Ihre Zeichen zu erhalten. Da Sie die aktivste in PHP zu sein scheinen, ist hier ein PHP-Ansatz:
$data = "Lorem|Ipsum|is|simply|dummy|text|A123|the|printing|and|typesetting|industry|";
$foo_data = preg_replace('/^((.*?\|){6})[^|]+/', '$1FOO', $data);
echo $foo_data; // Lorem|Ipsum|is|FOO|dummy|text|A123|the|printing|and|typesetting|industry|
Sie können die führenden caret entfernen, wenn Sie jedes siebte Auftreten ersetzen möchten. Sie können auch Klammern um den zweiten Teil hinzufügen ([^|]+
), wenn Sie ihn manipulieren/extrahieren müssen.
Damit Ihr preg_replace den Referenzwert vor 'FOO' im Ersetzungsparameter verwendet, habe ich festgestellt, dass dies funktioniert:' $ foo_data = preg_replace ('/^(?: (?:. *? \ |) {6}) \ K ([^ |] +)/',' $ 1FOO ', $ Daten); 'oder dies:' $ foo_data = preg_replace ('/^ ((*? \ |) {6}) \ K ([^ |] +)/',' $ 3FOO ', $ Daten); ' – mickmackusa