Вы можете использовать регулярные выражения, как показано ниже:
/\b((?<!:)\w*XYZ\w*)\b/ui
\b
до и после, чтобы просто соответствовать границе слова.
В ((?<!:)\w*XYZ\w*)
мы проверяем любое слово, которое содержит XYZ
и содержит ноль или более символов перед ним и ноль или более символов после него. С помощью негативного взгляда за (?<!:)
мы убедимся, что ему не предшествует :
.
Как указано @ unclexo в комментариях , вы можете добавить модификатор u
в конце для поддержки соответствия последовательности UTF-8. Подробнее см. Здесь .
Вы также можете добавить флаг i
для нечувствительного к регистру соответствия.
Фрагмент:
<?php
$tests = [
'This isXYZ a :exampleXYZa',
'isXYZ a :exampleXYZa abcXYZ',
'isXYZ a :exampleXYZXYZa abcXYZ',
'XYZ',
'XYZjdhf',
'This isXYZ a example:XYZa',
'äöüéèXYZ :äöüéèXYZäöüéè'
];
foreach($tests as $test){
if(preg_match_all('/\b((?<!:)\w*XYZ\w*)\b/ui',$test,$matches)){
print_r($matches[0]);
}
}
Демонстрация: https://3v4l.org/Y8SMj