2016-03-27 11 views
0

Ich brauche einen regulären Ausdruck wie ([.\n]*), aber das funktioniert nicht. Ich habe auch die s Modifikator versucht ...Regex für alle Zeichen einschließlich neuer Zeilen in Perl

Ich möchte einen Tisch bekommen Daten aus und dem regulären Ausdruck, die in einigen Fällen arbeitet, ist:

~m/>(@ARGV)<\/.*\n(<td.*\n*.*\/td>\n){3}<td(.*\n*.*\n*)<\/td>/ 

ich die $3 verwenden müssen, aber die Anzahl der Zeilenumbrüche ist nicht definiert und ich habe keine Ahnung, wie ich dieses Problem lösen könnte. Kann mir bitte jemand helfen?

+0

A '.' jedes Zeichen mit einem'/s' Modifikator. Nicht '[. \ N]', das einem Punkt und einem Zeilenvorschub entspricht. –

+2

Verwenden Sie regexp nicht zum Analysieren von HTML/XML. Auf diese Weise liegt Wahnsinn und extreme Code-Sprödigkeit. Verwenden Sie einen echten HTML/XML-Parser, um die gewünschten Daten zu extrahieren. –

+0

Danke für die Antworten. Eine weitere Frage ... Ich muss Code mit einer maximalen Länge von 160 Zeichen schreiben, denkst du, dass es möglich ist, einen Parser zu verwenden, um die benötigten Daten zu extrahieren? – kata

Antwort

1

Ich habe und @ARGV in Ihrer Testzeichenfolge nicht gefunden. So habe ich ein anderes Muster:

<td>((?:<span.*\n*){3})</td> 

REGEX 101 DEMO.

+0

Danke, aber das Problem ist, dass ich nicht genau die Anzahl der Zeilenumbrüche kenne, es kann 0 oder mehr sein. Ich habe versucht, * und {0,} anstatt der {7} zu schreiben, wie du es getan hast. [hier sind die Beispieldaten] (https://regex101.com/r/vH9tY4/3) – kata

+0

Jetzt ist die einfangende Gruppe in $ 1. Ist das in Ordnung? – Quinn

+0

Ich habe einen Teil der ursprünglichen Version und dieses hier verwendet und es ist jetzt in Ordnung, danke. – kata

Verwandte Themen