I am having problems grabbing some text using preg_replace() in php. I am just trying to remove all text that starts with a http|https|www up until the first whitespace character. I am currently using: (http|https|www)\S+ as my regex in preg_replace(). However I am getting this error when running the code: Warning: preg_replace(): Unknown modifier '\' I can use this same regex in a text editor, e.g. Sublime Text 2 with no problem. Any ideas why I am getting this error? Is there another way to grab the text I am looking for with a regex?
Thanks for any help.
You must delimit your regular expressions. This is usually a slash (/
), but can also be a pair of parentheses. After the second delimiter can follow a number of delimiters (multi-line regex, ignore white-space, case-insensitive, etc.). \
is not a valid modifier, and thus, PHP complains.
Modify your regex as follows:
preg_replace('/(http|https|www)\S+/', …, …);
Why not use a ^ infront of your regexp:
/^(http|http|www)/
This matches only at the beginning of the string
Try this:
$string = preg_replace( '%(http|https|www).*?\s%', '', $string );
This one works : [ demo : http://regexr.com?30l4d ]
$newstring = preg_replace( "/((https?|www).*?)\s/", "", $string);
You have to be careful about how strings are escaped with php:
For instance, "\s"
is an escaped s, and '\s'
is a backash folowed by a s.
Also don't forget to add slashes at the begining and the end of your regexp. For example: '/myregexp.*/'