User since
2005-12-02
28
Artikel
BenutzerIn
Hallo zusammen,
ich verzweifle an dem Thema Mustererkennung unter Perl. Wer kann mir hier helfen?
Hintergrund: Ich möchte folgende Zeile
$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....
Aus einer Datei filtern, und anschließend die einzelnen Wörter zwischen den Zeichen ' und '; erhalten (in diesem Beispiel also css_styled_content,tsconfig_help,context_help).
Diese Worte müssen anschließend noch separiert werden. So das letzt endlich eine Liste der Worte
- css_styled_content
- tsconfig_help
- context_help
ensteht.
Leider komme ich hier nicht wirklich zu Recht. Zusätzlich ist die Anzahl der Worte nicht immer gleich.
Gibt es hier ein Modul welches diese Arbeiten unterstützt? Oder kann mir jemand einen Tip geben, wie hier der Weg aussehen kann.
Besten Dank im Voraus
Gruß
Franz-Josef
User since
2005-12-02
28
Artikel
BenutzerIn
Hallo pktm,
leider klappt das Schnipsel so nicht. Ich habe es in den Quelltext eingebaut, es findet aber keinen Match.
Anbei daher einmal der gesamte Quelltext.
my $rw = open(FILE,"s:\\eclipse\\SBPerl\\work\\localconf.php");
if(not defined($rw)) {
die "Fehler beim ¨Offnen der Datei: $!\n";
}
while(defined(my $zeile = <FILE>)) {
# $zeile = qq~$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; //~;
if( $zeile =~ m~\$TYPO3_CONF_VARS['EXT']['extList'] = '(.+)'\; //~ ) {
print "Wörter, noch nicht separiert: $1";
my @w = split(m/\,/, $1);
}else{
print "kein match\n";
}
}
close(FILE);
leider ist da Ergebnis immer "kein Match"
Was ist hier noch Falsch?
Gruß
Franz-Josef
P.S.: Anbei noch das Input File
[php]
<?php
$typo_db_host = 'localhost'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help,extra_page_cm_options,impexp,sys_note,tstemplate,tstemplate_ceditor,tstemplate_info,tstemplate_objbrowser,tstemplate_analyzer,func_wizards,wizard_crpages,wizard_sortpages,lowlevel,install,belog,beuser,aboutmodules,setup,taskcenter,info_pagetsconfig,viewpage,t3skin,csh_de,dam,cc_awstats,adodb,kdo_dam_photogallery,rtehtmlarea,newloginbox,tt_address,lumogooglemaps,ter_update_check,static_info_tables,ts_language_de'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['dam'] = 'a:4:{s:8:"web_file";s:1:"0";s:15:"hideMediaFolder";s:1:"0";s:5:"devel";s:1:"0";s:5:"debug";s:1:"0";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['FE']['logfile_dir'] = 'fileadmin/awstat-data/'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['FE']['simulateStaticDocuments'] = '1'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['EXT']['extConf']['ts_language_de'] = 'a:1:{s:2:"en";s:1:"1";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['ligamanager4'] = 'a:1:{s:8:"language";s:2:"de";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help,extra_page_cm_options,impexp,sys_note,tstemplate,tstemplate_ceditor,tstemplate_info,tstemplate_objbrowser,tstemplate_analyzer,func_wizards,wizard_crpages,wizard_sortpages,lowlevel,install,belog,beuser,aboutmodules,setup,taskcenter,info_pagetsconfig,viewpage,t3skin,csh_de,dam,cc_awstats,adodb,kdo_dam_photogallery,newloginbox,tt_address,lumogooglemaps,ter_update_check,static_info_tables,mw_shell,lib,div,sr_quicktime,rtehtmlarea,overlib,sk_pdfviewer,sp_bettercontact,goof_fotoboek,photoblog,dam_catedit,ce_gallery,ts_language_de'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['bahag_photogallery'] = 'a:2:{s:16:"requiredIptcData";s:435:"object_name, edit_status, priority, category, supplementary_category, fixture_identifier, keywords, release_date, release_time, special_instructions, reference_service, reference_date, reference_number, created_date, originating_program, program_version, object_cycle, byline, byline_title, city, province_state, country_code, country, original_transmission_reference, headline, credit, source, copyright_string, caption, local_caption";s:7:"im6Path";s:0:"";}'; // Modified or inserted by TYPO3 Extension Manager.
?>[/php]
User since
2003-08-07
2921
Artikel
BenutzerIn
Na, so pauschal würde ich mal darauf tippen, dass es daran liegt, dass mein Kode ungestet ist :)
Hast du use strict; und use warnings an? Eventuell kommen dann ein paar Hinweise.
EDIT: die [] müssen noch escaped werden. Mach im reg. Ausdruck aus [] einfach \[\].
Und, kannst du deinen Beitrag oben etwas umformatieren, damit der nicht ganz so breit ist?
User since
2003-08-07
2921
Artikel
BenutzerIn
Das klappt aber nur, wenn sich die Anzahl ' in der Zeile nicht ändert.
Wenn du hingegen auf das distinktive Muster "Dollar($) gefolgt von Zeichen mit \[\] gefolgt von einen =, einem Leerzeichen und einem '" kontrentrierst bekommst du eventuell leichter, da du deinen Kode nicht für jede neue STruktur (z.B. mit zwei ' mehr) anpassen musst.
User since
2007-10-06
16
Artikel
BenutzerIn
pktm+2007-10-06 14:23:02--Das klappt aber nur, wenn sich die Anzahl ' in der Zeile nicht ändert.
Wenn du hingegen auf das distinktive Muster "Dollar($) gefolgt von Zeichen mit \[\] gefolgt von einen =, einem Leerzeichen und einem '" kontrentrierst bekommst du eventuell leichter, da du deinen Kode nicht für jede neue STruktur (z.B. mit zwei ' mehr) anpassen musst.
Man konnte das vielleicht noch so präzisieren, aber man muß ja auch nicht übergenau sein...
....
my @array = split(/= '/, $zeile);
$array[1]=~s/'.*$//;
my @brray = split(/,/, $array[1]);
....
oder so:
my @array = split(/= *'/, $zeile);
man weiß ja nicht, ob nach dem = immer genau ein Space kommt.
User since
2006-11-26
384
Artikel
BenutzerIn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use warnings;
use strict;
my $string = "\$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....";
my $pattern = " = \'(.*)\'";
my @output;
$string =~ /$pattern/;
@output = split(/,/, $1);
print $output[0];
renee darf mich aber gerne eines besseren belehren :)
Aber es funktioniert ... *g*
Gruß
rperl
Oder aber
1
2
3
4
5
6
7
8
9
10
11
12
use warnings;
use strict;
my $string = "\$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....";
my @output;
@output = split(/,/, $string);
($output[0]) =~ s/\$TYPO3_CONF_VARS\[\'EXT\'\]\[\'extList\'\] = \'//;
print $output[0]
Bei zweiterem kam das
split() als erstes zum Einsatz und der Rest wurde nachher mit s/// rausgefischt. Fragt sich was schneller laeuft.... renee?