A simple pattern match to return 10000000 for the ID and 12000000 for the P_ID would be:
/:ID\s(\d*).*:P_ID\s(\d*)/
You can then refer to the matches using $1 and $2 respectively.
Hope this helps.
-- Foxcub | [reply] [d/l] |
Thanx again!:)
Does the snippet work if there are more than one ID/P_ID in an array element?
| [reply] |
If you want to act on more than one id then try
while ($arrayElement =~ /:ID\s(\d*).*:P_ID\s(\d*)/g ) {
print $1,$2,"\n"; # just an example
}
The /g gets all matches of the regex, so the captured bit ($1,$2) will be updated for each match in the while loop.
| [reply] [d/l] |
For that, you'd want to use the global (/g) modifier on the end of your regex, and use the regex in a list context:
@ids = m/:ID\s\d*/g
You'll need to do another regex to pull the P_IDs,
@p_ids = m/:P_ID\s\d*/g,
and you won't be able to use backreferencing to ditch the ":ID " part. For that, I guess you could use another regex, or, if the data is regular, something like:
for $i (0..$#ids) {$ids[Ģi] = substr ($ids[$i], 4);}
| [reply] [d/l] [select] |
No, you'll have to think a little here.
Hotshot
| [reply] |
as for me, I'd use a little split action, as it looks like you are using colon-separated records. This has the advantage of isolating the fields from each other, allowing you to more easily (and safely) extract their content. while(<>){
my ($id, $user_name, $p_id, $password) = split ':';
#do stuff to the stuff in $id and $p_id
}
thor | [reply] [d/l] [select] |
/ID\s+(\d+).+P_ID\s+(\d+)/;
$id = $1;
$pid = $2
Hotshot | [reply] [d/l] |