Reputation: 87
I want to find all the demo words using PHP and regEx.
$input ='demo';
$pattern = ''; //$input can be used along with regex, please help here
$text = 'This is dem*#o text, contains de12mo3 text, is .demo23* text'
if(preg_match($pattern, $text))
{
echo 'found';
}else{
echo'not found';
}
the search word demo
in the text
may be present in the following format
1) may start with special characters/numbers Eg. "12*demo"
2) may contain special characters/numbers within the word Eg. "de12*mo"
3) may end with special characters/numbers Eg. "demo12*"
please help I am stuck, thanks in advance!
Note: The $input can be max. of 15 in length
Upvotes: 1
Views: 551
Reputation: 15905
I would start by removing all special characters and numbers from the string, and then matching the word using word boundaries:
$cleaned = preg_replace('/[^a-z ]+/i', '', 'This is dem*#o text, contains de12mo3 text, is .demo23* text');
preg_match_all('/\bdemo\b/i', $cleaned, $matches, PREG_OFFSET_CAPTURE);
var_dump($matches);
Will give you (Codepad Demo):
array(1) {
[0] => array(3) {
[0] => array(2) {
[0] => string(4) "demo"
[1] => int(8)
}
[1] => array(2) {
[0] => string(4) "demo"
[1] => int(27)
}
[2] => array(2) {
[0] => string(4) "demo"
[1] => int(40)
}
}
}
The first line replaces any characters in your string (called the subject argument) that match /[a-z ]+/i
with '', essentially removing the characters. The regex matches any character (or group of characters) that is not (^
) the letters a-z
or a space. The i
flag tells regex that the search should be case insensitive (This saves us from writing a-zA-Z
).
The next line uses word boundaries to match the word 'demo'. However, you could substitute in any word.
Upvotes: 3
Reputation: 3019
/\b[^a-z]*d[^a-z]*e[^a-z]*m[^a-z]*o[^a-z]*\b/i
Matches anything but a-z between the demo characters
Upvotes: 1
Reputation: 41597
Probably not efficient; But you could use this:
/(.*)d(.*)e(.*)m(.*)o(.*)/i
That would match anything.
Upvotes: 0