Удалить слова в предложении, но не в двойных кавычках - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу отформатировать предложение с заменами, но не между двойными кавычками.

Пример , это предложение:

$remplacement = ['the', 'in']; // words who must be deleted
$sentence = "the sea" OR the sea AND "the sea" in the world.

Должно быть :

"море" ИЛИ море И "море" мир.

Я думаю, что мы можем использовать preg_replace или preg_match.Я нашел регулярное выражение, заключающее текст в двойные кавычки:

'/[^"]+(?=(?:[^"]*"[^"]*"[^"]*)*$)/'

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете игнорировать процитированные слова с глаголами PCRE.Затем вы можете пометить термины знаком «или» и просто заменить их.Вы должны использовать границы слов, чтобы частичные совпадения не заменялись.

$remplacement = ['the', 'in'];
$sentence = '"the sea" OR the sea AND "the sea" in the world.';
echo preg_replace('/([\'"]).*?\1(*SKIP)(*FAIL)|\b(' . implode ('|', $remplacement) . ')\b/', '', $sentence);

https://3v4l.org/ZELoV

Ваш пример неверен, правда?В конце the world также должно стать world.

Если вы заботитесь о двойном интервале, вы можете использовать:

preg_replace('/\h\h+/', ' ',

, чтобы избавиться от этого.

https://3v4l.org/pqCH3

...