2016-03-20 10 views
0

Eingang zu optimieren:Bitte helfen Sie diesen regex

+ 1220  001d.a16a.9400 dynamic 0   F F Po10 
* 1220  0021.f60f.4127 dynamic 0   F F Eth1/46 

Expression:

\S+\s+(\d+)\s+([0-9A-Fa-f]{4}[.][0-9A-Fa-f]{4}[.][0-9A-Fa-f]{4})\s+\w+\s+\d+\s+\w+\s+\w+\s+(.*) 

ersetzen:

$1\t$2\t$3 

Ausgang:

1220 001d.a16a.9400 Po10 
1220 0021.f60f.4127 Eth1/46 
+0

welche Sprache/Tool verwenden Sie? Ist die Anzahl der Felder immer gleich? –

+1

welche Sprache und Kontext. Was meinst du mit optimieren? Tut es, was Sie vorhaben zu tun? –

+0

Wenn Sie daran interessiert sind, das Backtracking zu reduzieren, um O (n) Parsing zu erreichen, werfen Sie einen Blick auf [Atomic Grouping] (http://www.regular-expressions.info/atomic.html) und [Possessive Quantifiers] (http://www.regular-expressions.info/possessive.html) ... – Aprillion

Antwort

0

Wenn Sie mit dem "optimieren" bedeuten verkürzen, versuchen Sie dieses:

Expression:

^.+?(\d+)\s+([^\s]+?)\s.+?([^\s]+)$ 

ersetzen:

$1\t$2\t$3 

Vielleicht haben Sie/m verwenden (Mehrzeilig) und/s (Punkt entspricht jedem Zeichen) Schalter.

PHP-Beispiel:

<?php 
    $sourcestring="+ 1220  001d.a16a.9400 dynamic 0   F F Po10"; 
    echo preg_replace('/^.+?(\d+)\s+([^\s]+?)\s.+?([^\s]+)$/ms','$1\t$2\t$3',$sourcestring); 
?> 
+0

Dank @netblognet – ovdemonz