0

Hi,

I'm currently writing a routine to extract one, two and three word phrases from a string but with two or three word phrases I'm not getting all the phrases. For example

the string "blah blah blah" will show one ocurance of "blah blah" when really there is two.

My code is

while ($str =~ m/(\w+) (\w+)/g)
{

}

Any help would be appricated\

Thanks
Bruce

2
Contributors
4
Replies
5
Views
11 Years
Discussion Span
Last Post by thorne44
0

That's not your code; it doesn't output anything at all.

While doing a global search, Perl continues just after the end of the previous match.

0

That's not your code; it doesn't output anything at all.

While doing a global search, Perl continues just after the end of the previous match.

The regexp line is the only line that matters. The code inside just puts $1 and $2 into an array.

The full code is

while ($str =~ m/(\w+) (\w+)/g) 
    {
    $keywords{'I_'.$1.'_'.$2}{'Cnt'} += 2;
    $keywords{'I_'.$1.'_'.$2}{'Word'} = "$1 $2";
    }

My problem is that perl continues after the end of the last match so with a string of "This is a test" I'll get
"this is" and "a test" but I won't get "is a" even though it's a valiv phrase.

Thanks
Bruce

Edited by pyTony: fixed formating

0

Then don't do it that way. Match only single words, and take the array of single words and work with that. If you're worried about in-between characters, and only want a single space between, do another match for contiguous strings of non-word characters, and then you're set to write some code that ties things together.

0

Then don't do it that way. Match only single words, and take the array of single words and work with that. If you're worried about in-between characters, and only want a single space between, do another match for contiguous strings of non-word characters, and then you're set to write some code that ties things together.

Thats what I was going to do but I was hoping that using regexp I could do it neater and faster than using a split array

I'd expect something simple like this could be done easily with regexp. I was hoping there was a flag or something that I didn't know about so it could look at more than the last match.

Oh well back to the hard way :rolleyes:

Thanks
Bruce

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.