2017-06-04 2 views
0

Wie kann ich Text zwischen bestimmten Vorkommen bestimmter Zeichen auswählen?So wählen Sie Text zwischen bestimmten Vorkommen bestimmter Zeichen aus

Zum Beispiel in folgenden string:

Lorem | Ipsum | is | einfach | Dummy | Text | A123 | die | Druck | und | Schriftsatz | Industrie |

Ich möchte Text zwischen dem 6. und 7. Vorkommen von '|' entfernen/ersetzen Zeichen, d.h. das Wort "A123".

Ist es möglich, dies mit Regex zu tun?

Antwort

1

Sie können Zählerquantoren verwenden, die normalerweise durch Zahlen in geschweiften Klammern angegeben werden (z. B. pattern{7}). Zum Beispiel dieses sed Befehl ersetzt A123 mit REP:

sed 's/\(\([^|]*|\)\{6\}\)[^|]*/\1REP/' 
1

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.

+0

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

Verwandte Themen