Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > regex instead of a new lover. . .

Reply
Thread Tools

regex instead of a new lover. . .

 
 
aardvarkman
Guest
Posts: n/a
 
      11-25-2007
Well, I'd rather get ahold of anusha and forget this whole business,
but I guess I should finish this first:

I have a config file that get read by my main script. A sub parses the
file and does just fine under simple circumstances. It finds all
this:

Index directory === C:/
HTML resource directory === C:/Aardvark/res/user_html/test_index
HTML resources === *.html *.htm
File types to index === html|htm|pdf|xml|zip|mif|txt

# Frame template options:

Template directory === C:/Aardvark/res/frame_templates
Template types === *.fm
Template objects === Para,Char,XRefs,Vars,Tables,Page Layouts,Math
Defs,Ref Pages,Conditions

I get the values on both sides of the ===.

The problem is that when there is a . or ? (and maybe other things)
it fails:

# Stuff I can't read
Title rule choices === title.fm
TOC rule choices === TOC.fm
Appendix rule choices === apx.fm
Index rule choices === IOM.fm|IX.fm
Body rule choices === Everything else!
Other rule choices 1 === ????????
Other rule choices 2 === ????????

What I am looking for is a regex that finds anything one line at a
time separated by ===. In other words, all my config options are on a
single line like: key === value.

I started guessing, then started researching, and now I ask the
experts: what will work?

Stuff I tried:

while(<$fh>){
if (/#########/){
last;
} # todo: make this match . and ?
elsif (/^\ *(.*?)\ *===\ *(.*?)\ *$/){ # original
# elsif (/^\ *(.*?)\ *===\ *(.*?)\ *$/sm){
# elsif (/\A\ *(.*?)\ *===\ *(.*?)\ *\Z/sm){
# elsif (/^ *(.*?) *=== *(.*?) *$/){
# elsif (/^ *(.*?) *=== *(.*?) *$/sm){
# elsif (/^\ *(.*?)\ *===\ *(.*?)$/is){
# elsif (/^(.*?)===(.*?)$/){
# elsif (/^\s+(.*?)\s+$===^\s+(.*?)\s+$/) {
# elsif (/^\s+(.*?)\s+$===^\s+(.*?)\s+$/m) {
# elsif (/^(.*?) === (.*?)$/sm) {
$items -> {$1} = $2;
}
}
return $items;
 
Reply With Quote
 
 
 
 
Gunnar Hjalmarsson
Guest
Posts: n/a
 
      11-25-2007
aardvarkman wrote:
> What I am looking for is a regex that finds anything one line at a
> time separated by ===. In other words, all my config options are on a
> single line like: key === value.


my %config;
while (<$fh>) {
if ( /(.+) === (.+)/ ) {
$config{ $1 } = $2;
}
}

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl
 
Reply With Quote
 
 
 
 
Uri Guttman
Guest
Posts: n/a
 
      11-25-2007
>>>>> "GH" == Gunnar Hjalmarsson <(E-Mail Removed)> writes:

GH> aardvarkman wrote:
>> What I am looking for is a regex that finds anything one line at a
>> time separated by ===. In other words, all my config options are on a
>> single line like: key === value.


GH> my %config;
GH> while (<$fh>) {
GH> if ( /(.+) === (.+)/ ) {
GH> $config{ $1 } = $2;
GH> }
GH> }

a 2 liner that also does the i/o (untested):
(assuming the config come from a file)

use File::Slurp ;
my %config = read_file( 'config' ) =~ /^([^=]+)===(.*)$/mg ;

uri

--
Uri Guttman ------ http://www.velocityreviews.com/forums/(E-Mail Removed) -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
 
Reply With Quote
 
aardvarkman@gmail.com
Guest
Posts: n/a
 
      11-26-2007
Thanks! Turns out many of these regexs worked. The new ones you
provided taught me something.

However, the problem was in some other code. My match ended up getting
sent to a sub that creates LabEntry widgets on the fly. So when a
value with a non-word character went into $textvar, my validation
string removed it from the entry field. So I was getting the correct
stuff, but it just wasn't showing up in user interface.

sub createLabEntry {
my $parentwidget = $_[0];
my $label = $_[1];
my $textvar = $_[2];
my $width = $_[3];

if ( $$textvar !~ /^[\w+\|]*$/i ) { $$_textvar = ''; }
$parentwidget->LabEntry(
-label => $label,
-labelPack => [ "-side" => "left" ],
-textvariable => $textvar,
-width => $width,
-background => 'white',
-validate => 'key',
-validatecommand => sub { $_[0] =~ /^[\w+\|]*$/i },
-invalidcommand => sub { $parentwidget->bell }
);
}
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can I specify regex group to return float or int instead of string? Jeremy Python 4 02-25-2010 08:09 PM
regex search loops instead of findall brad Python 1 08-05-2008 06:15 PM
How make regex that means "contains regex#1 but NOT regex#2" ?? seberino@spawar.navy.mil Python 3 07-01-2008 03:06 PM
Window.Open get new tab instead of new window in FireFox Fredzidd@gmail.com Javascript 1 02-29-2008 03:06 AM
[Firefox] Use New Tab instead of New Window? paul j Firefox 7 04-07-2005 09:40 PM



Advertisments