J'essaie d'extraire le contenu d'un élément de date de nombreux documents sgml mal formés. Par exemple, le document peut contenir un élément de date simple commePerl RegEx: Limiter le motif à la première occurrence d'un caractère
<DATE>4th July 1936</DATE>
ou
<DATE blaAttrib="89787adjd98d9">4th July 1936</DATE>
mais peut aussi poilu que:
<DATE blaAttrib="89787adjd98d9">4th July 1936
<EM>spanned across multiple lines and EM element inside DATE</EM></DATE>
Le but est d'obtenir le « 4ème Juillet 1936 ". Puisque les fichiers ne sont pas gros, j'ai choisi de lire tout le contenu dans une variable et de faire l'expression rationnelle. Ce qui suit est l'extrait de mon code Perl:
{
local $/ = undef;
open FILE, "$file" or die "Couldn't open file: $!";
$fileContent = <FILE>;
close FILE;
if ($fileContent =~ m/<DATE(.*)>(.*)<\/DATE>/)
{
# $2 should contain the "4th July 1936" but it did not.
}
}
Malheureusement, le regex ne fonctionne pas pour l'exemple poilu. C'est parce qu'à l'intérieur du <DATE>
il y a un élément <EM>
et il s'étend également sur plusieurs lignes.
Est-ce que n'importe quelle âme peut me donner des indications, des directions ou des indices?
Merci beaucoup!
[Les amis ne permettent pas aux amis d'analyser HTML avec des expressions régulières!] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contenu -tags/1732454 # 1732454) Utilisez un analyseur. – Ether
[Ne pas analyser HTML avec Regex utilisent HTML :: Parser] (http://perldoc.perl.org/perlfaq6.html#How-do-I-match-XML%2c-HTML%2c-or-other- méchant% 2c-laid-choses-avec-un-regex% 3f) Utilisez également [3 arguments ouverts et lexical filehandles] (http://perldoc.perl.org/functions/open.html) – xenoterracide
aussi queston ... vous dire mal formé ... voulez-vous dire/pas/bien formé? ce qui signifie quelque chose comme arrive? –
xenoterracide