loop throw perl regexp selection


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting loop throw perl regexp selection
# 1  
Old 08-27-2006
loop throw perl regexp selection

hello all
i have string that i need to parse something list that :
<form name="CustomerStatus" action="<% env.GetURI %>" method="post"<$if(blah)%> name="<% env.get("StatusList") %>" ><% hello %><input type="hidden" name="<% env.get("Operation") %>" value="">

now im selecting the the string part with lazy regexp selection :

some thing like that :

(<%.*?%>)

but now im stack if say i like to loop throw all the matching string parts and do something with that selection and then put the modified selection back to place ?

how can i ?
# 2  
Old 08-27-2006
Well, you can actually do something highly nasty with s/// in a loop. Look at my example.

Code:
$_ = q|<form name="CustomerStatus" action="<% env.GetURI %>"
method="post"<%if(blah)%> name="<% env.get("StatusList") %>" >
<% hello %><input type="hidden" name="<% env.get("Operation") %>" value="">|;
print "Before: $_\n";

while ($_ =~ s/(<%.*?%>)/&{sub {
    my $out = shift;
    $out =~ tr|<>|[]|;
    $out;
}}($1)/ge) {}
print "After: $_\n";

Output:

Code:
[bernardchan@bernardchan ~]$ perl -w /dev/shm/nasty.pl
Before: <form name="CustomerStatus" action="<% env.GetURI %>"
method="post"<%if(blah)%> name="<% env.get("StatusList") %>" >
<% hello %><input type="hidden" name="<% env.get("Operation") %>" value="">
After: <form name="CustomerStatus" action="[% env.GetURI %]"
method="post"[%if(blah)%] name="[% env.get("StatusList") %]" >
[% hello %]<input type="hidden" name="[% env.get("Operation") %]" value="">

# 3  
Old 08-28-2006
thanks for the fast reply can you please explain me few things
what is : "$_ = q|"........string ......."|;
and what is the /ge flags?
thanks
# 4  
Old 08-28-2006
q|.....| is just another way to write '.....'.

In s///ge, g means "global" and e means "expression".

That means we are running a search-n-replace repeatedly, and a Perl expression is given in the second operand of s/// instead of a replacement string.
# 5  
Old 08-28-2006
thanks allot for your help
one more question on regexp
i have allot of problem to undestand this :
say i have :
<% while i< j+4 %>kkk<% while (iHourCounter<24) %>
and i like to match only the while that NOT contains "(" or ")" what i have now is :
<%\s*while\s*(.+?)\s*%>

that match me every thing between the while and the closeing %>
but when i add [^)(] to exclude the match of the second while
it does not work
<%\s*while\s*[^(](.+?)\s*%>
why is that ?
thanks again
# 6  
Old 08-28-2006
hi i tryed your example but when i tryed to put some changes
i had some wired results i did:

my $rec = q|<input type="text" name="<% Env.get("m_n_decimalPrecision") 60 %>" id="m_n_de-cimalPrecision" maxlength="1" style="width: 20px;" value="<% m_n_user_-decimalPrecision %>">| ;

while ($rec =~ s/(<%.*?%>)/&{sub {
my $out = shift;
$out = searchAndreplace($out);
print "result".$out."\n";

}}($1)/ge) {}


sub searchAndreplace{
my $o =$_[0];
if($o =~ m/<%\s*(.+)\s*%>/){
if($o =~ m/([^%]\>|<[^%]|=|-|\*|\\|\/)/){
print "Good: $o \n";
}

}
return $out;
}

print $rec;


but i didnt get any result into the $out variable inside the while loop
why is that?
# 7  
Old 08-28-2006
Please study my program more carefully. The sub {} encloses the subroutine which returns the substitute string for each replace cycle. The eventual modified string is $_. The body of the while loop in my example is empty.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

find and Replace String in Perl - Regexp

Trying to find and replace one string with another string in a file #!/usr/bin/perl $csd_table_path = "/file.ntab"; $find_str = '--bundle_type=021'; $repl_str = '--bundle_type=021 --target=/dev/disk1s2'; if( system("/usr/bin/perl -p -i -e 's/$find_str/$repl_str/' $csd_table_path")... (2 Replies)
Discussion started by: cillmor
2 Replies

2. Shell Programming and Scripting

Perl regexp to extract first and second column

Hi, I am trying with the below Perl one-liner using regular expression to extract the first and second column of a text file: perl -p -e "s/\s*(\w+).*/$1/" perl -p -e "s/\s*.+\s(.+)\s*/$1\n/" whereas the text file's data looks like: Error: terminated 2233 Warning: reboot 3434 Warning:... (3 Replies)
Discussion started by: royalibrahim
3 Replies

3. Shell Programming and Scripting

Perl regexp help

Hi, I have file like below: 1|1212|34353|5fdf 6575||dfgdg sfsdf |afsf||4|aasfbc|~1213~~~~~ 1|1212|34353|5fdf 6575||dfgdg sfsdf |affsf| |4|abc|~rwarw~~asa~~~123~312313 1|1212|34353|5fdf 6575||dfgdg sfsdf |afasfs||4|aasfdbc|~564564~~~~ 1|1212|34353|5fdf 6575||dfgdg sfsdf... (1 Reply)
Discussion started by: sol_nov
1 Replies

4. Programming

Perl OLE Selection property iteration in cycle

Hi gurus, i am trying to write simple perl script using win32 ole which will iterate over all M$ word paragraphs (any text that ends with a hard return) and print only those paragraphs that matches the specified condition. The problem is that I need to access font size property. It seems to me that... (0 Replies)
Discussion started by: wakatana
0 Replies

5. Shell Programming and Scripting

replace awk with a perl one liner (REGEXP and FS)

hello, I want to replace awk with a perl one liner in unix. i use in awk REGEX and FS ( field separator) because awk syntaxes in different unix os versions have not the same behaviour. Awk, Nawk and GNU Awk Cheat Sheet - good coders code, great reuse i have a file named "file" and want... (5 Replies)
Discussion started by: bora99
5 Replies

6. Shell Programming and Scripting

perl regexp: no match across newlines

Hi. Here's a tricky one (at least to me): I have a file named theFile.txt (UTF-8) that contains the following: a b cWhen I execute perl -pe 's|a.*c|d|sg' theFile.txtin bash 3.2 on MAC OS X 10.6, I get no match, i.e. the result is a b cagain. Any clues why? (2 Replies)
Discussion started by: BatManWSL
2 Replies

7. Shell Programming and Scripting

perl regexp matching

Hello, I cannot see what's wrong in my code. When I run code below, it just print an empty string. my $test = "SWER~~ERTGSDFGTHAS_RTAWGA_DFAS.x4-234253454.in"; if ($test = ~ m/\~{1,2}.*4/) { print "$1\n"; } else { print "No match...\n"; } Anyone know what I'm doing wrong? ... (4 Replies)
Discussion started by: urandom
4 Replies

8. Shell Programming and Scripting

GUI selection for perl scripts

Hi, I need to develop a GUI for Perl scripts which needs frequent user interactions(like getting the inputs from the user at various stages). Can anyone suggest a language to develop a GUI which is simple to use and which can be implemented within a short time frame? Thanks, Vishwa (1 Reply)
Discussion started by: vishwa787
1 Replies

9. Shell Programming and Scripting

perl regexp

What is the easiest way to get full address of *.jpg images from html file using perl? example: http://farm3.static.flickr.com/2397/2126443111_65a810004c.jpg (1 Reply)
Discussion started by: mirusnet
1 Replies

10. Shell Programming and Scripting

Need Help with Perl REGEXP

I need help with a Perl regular expression. The following string blows up my program: <david(greg jim)> If I type this string, there is no problem: <david(greg_jim)> or type david(gregjim) or type <david greg jim> the CGI program does not complain. For some reason that I do not understand the... (1 Reply)
Discussion started by: mh53j_fe
1 Replies
Login or Register to Ask a Question