PHP preg_replace не алфавитно-цифровые символы и выбранные соединения, а затем разделить - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу заменить в этой строке:

This is my Store, it has an amazing design; its creator says it was losing money and he doesn't want to maintain it

Все не алфавитно-цифровые символы, кроме ' (не) и всех выбранных соединений:

is, it, its, the, this, if, so, and

ИтакПока мне удалось получить этот результат:

Array
(
    [1] => This
    [2] => my
    [3] => Store
    [4] => has
    [5] => an
    [6] => amazing
    [7] => design
    [8] => s
    [9] => creator
    [10] => says
    [11] => was
    [12] => losing
    [13] => money
    [14] => and
    [15] => he
    [16] => doesn
    [17] => t
    [18] => want
    [19] => maintain
)

Вот код:

$string = "This is my Store, it has an amazing design; its creator says it was losing money and he doesn't want to maintain it";
$words = array_filter(preg_split('/\s+/', preg_replace('/\W|\b(it|the|its|is|to)|\b/i', ' ', $string)));

print_r($words);

https://3v4l.org/cLrM4

Но, как вы можете видеть, он заменяетit когда это должно заменить its, и это также заменяет ' в doesn't.

Может кто-нибудь помочь мне понять, где я делаю что-то не так?X_X

PS: Также мне нужно, чтобы он был без учета регистра , что /i работает довольно фарсично: (

Спасибо!

1 Ответ

0 голосов
/ 16 декабря 2018

Измените ваше регулярное выражение на следующее:

/\W\B|\b(it|the|its|is|to)\b/i

Труба в |\b не имела смысла для меня, возможно, это была опечатка.Дополнительные \B после \W обеспечат замену не алфавитного символа, только если за ним сразу не следует алфавитный символ.Это менее ограничительно, чем то, что вы просили, но может быть полезно и для других случаев, например, для слов с дефисом (например, свекровь).

...