Jump to content

[SOLVED] preg_match_all regexp question


backyard

Recommended Posts

Hello all, I'm trying to pull all the matches of ! characters then space. I've wrote a regexp that I thought would work but does not. I ran it through eclipse and looked at the variables and didn't get what I wanted. The language is php.

 

$r="!goog jkdfkjdsf !hon kasjd !ggg dksjlajd !goh jhsdjhsadhd !hon kjkljjlk !bbb"
preg_match_all('/!.+[ ]/',$r,$matches);
// search for ! one time then any number of characters then space
//output
matches[0] = !goog jkdfkjdsf !hon kasjd !ggg dksjlajd !goh jhsdjhsadhd !hon kjkljjlk 
//desired output
matches[0] = !goog !hon !ggg !goh !hon !bbb

 

I can't figure out what I'm doing wrong. What am I missing?

Link to comment
https://forums.phpfreaks.com/topic/158537-solved-preg_match_all-regexp-question/
Share on other sites

The issue is that the + is greedy. It tries to match as much as possible. You can add a ? to make it not greedy and it may work. Though for a space, you can just use \s rather than [ ].

 

But here's my way of doing it.

$r = '!goog jkdfkjdsf !hon kasjd !ggg dksjlajd !goh jhsdjhsadhd !hon kjkljjlk !bbb';
preg_match_all('#![^\s]*#', $r, $matches);
var_dump(implode(' ', $matches[0]));

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.