Home > Archive > PERL Beginners > June 2005 > Seaching for Words at the beginning of the line and end of line
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Seaching for Words at the beginning of the line and end of line
|
|
| Siegfried Heintze 2005-06-03, 3:56 am |
|
How do I search for the word "intern" without searching for "internal"?
What I have been doing is /intern[^a]/ but that won't match /intern$/.
Thanks,
Siegfried
| |
| Jeff 'japhy' Pinyan 2005-06-03, 3:56 am |
| On Jun 2, Siegfried Heintze said:
> How do I search for the word "intern" without searching for "internal"?
>
> What I have been doing is /intern[^a]/ but that won't match /intern$/.
You want to use a negative look-ahead:
/intern(?!al)/
That means "match 'intern' that is not followed by 'al'". But perhaps you
just want to use word boundaries?
/\bintern\b/
That will only match "intern" when there are no word characters to the
left or right of it. Thus, "I am an intern" will match, but "internal
problems" and "abintern" won't match. ("Abintern" isn't a word, but I
wanted to prove a point.)
--
Jeff "japhy" Pinyan % How can we ever be the sold short or
RPI Acacia Brother #734 % the cheated, we who for every service
http://japhy.perlmonk.org/ % have long ago been overpaid?
http://www.perlmonks.org/ % -- Meister Eckhart
| |
| Siegfried Heintze 2005-06-03, 3:56 am |
| Thanks! Yes I want the \b.
Now what about this:
s/\bJr\b/ Junior /gi;
This is not exactly what I want because it will put a space before "Junior"
even if Junior is at the beginning and I don't want a space?
I suppose I could do this:
s/(\b)Jr(\b)/\1Junior\2/gi;
Is there an easier way?
Thanks,
Siegfried
-----Original Message-----
From: Jeff 'japhy' Pinyan [mailto:japhy@perlmonk.org]
Sent: Thursday, June 02, 2005 7:04 PM
To: Siegfried Heintze
Cc: beginners@perl.org
Subject: Re: Seaching for Words at the beginning of the line and end of line
On Jun 2, Siegfried Heintze said:
> How do I search for the word "intern" without searching for "internal"?
>
> What I have been doing is /intern[^a]/ but that won't match /intern$/.
You want to use a negative look-ahead:
/intern(?!al)/
That means "match 'intern' that is not followed by 'al'". But perhaps you
just want to use word boundaries?
/\bintern\b/
That will only match "intern" when there are no word characters to the
left or right of it. Thus, "I am an intern" will match, but "internal
problems" and "abintern" won't match. ("Abintern" isn't a word, but I
wanted to prove a point.)
--
Jeff "japhy" Pinyan % How can we ever be the sold short or
RPI Acacia Brother #734 % the cheated, we who for every service
http://japhy.perlmonk.org/ % have long ago been overpaid?
http://www.perlmonks.org/ % -- Meister Eckhart
| |
| Jeff 'japhy' Pinyan 2005-06-03, 3:56 am |
| On Jun 2, Siegfried Heintze said:
> s/\bJr\b/ Junior /gi;
>
> This is not exactly what I want because it will put a space before "Junior"
> even if Junior is at the beginning and I don't want a space?
Just do
s/\bJr\b/Junior/gi;
The \b is an anchor -- it matches a location, not a character.
--
Jeff "japhy" Pinyan % How can we ever be the sold short or
RPI Acacia Brother #734 % the cheated, we who for every service
http://japhy.perlmonk.org/ % have long ago been overpaid?
http://www.perlmonks.org/ % -- Meister Eckhart
|
|
|
|
|