
poly4life
Novice
Mar 28, 2011, 8:41 AM
Post #7 of 7
(12622 views)
|
Re: [FishMonger] Can I do an if-then-else regex mixing match and substitution?
[In reply to]
|
Can't Post
|
|
Thank you for the suggestions. miller's suggestion is pretty much what I was trying to accomplish. However, I am executing this in in-place edit mode in a batch file and it's failing on the vertical bar character in my regex:
if (m~[\'|\"]\d{1,2}[\'|\"]~i)... The error is "The system cannot find the path specified." I realize that I don't need the vertical bar character, in this case, but if I do in the future, this could be an issue. Now, I tried modifying it a couple of different ways to narrow in on the problem. These work:
if (m~[\'\"]\d{1,2}[\'\"]~i)... if (m~[\'|\"]\d{1,2}[\'\"]~i)... This does not:
if (m~[\'\"]\d{1,2}[\'|\"]~i)... I tried escaping the vertical bar but I got the same error:
if (m~[\'\"]\d{1,2}[\'\|\"]~i)... Does anybody know what's the problem? Update: I did manage to find the solution. The problem is I had to precede the vertical bar with the caret (^) symbol and now it enters the if loop, due to the fact that i'm executing a Perl script inside a batch file. I also discovered that doing a match, followed by a substitution using in-place edit mode won't replace in the file. I think this is also due to the batch process. FYI, I'm using
for %%X in (*.txt) do perl -pi.bak -e "Perl code" %%X What I'm wondering is is it possible to use look-ahead or look-behind assertions in substitutions or are assertions for matching only? Either way, it appears that in-place edit won't work here and I'll have to follow your suggestions to a T, running separate perl script. Thank you for your help. Thank you.
(This post was edited by poly4life on Mar 28, 2011, 9:34 AM)
|