For Programmers: Free Programming Magazines  


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
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com