Я хочу поставить кавычки вокруг каждого слова, выражающего определение. Все слова должны сделать это через двоеточие.
Например:
def1: "some explanation"def2: "other explanation"
Должен быть преобразован в
"def1": "some explanation""def2": "other explanation"
Как мне написать это с preg_replace в PHP?
У меня есть это:
preg_replace('/\b:/i', '"$0"', 'def1: "some explanation"')
Но это только двоеточие, а не слово:
key":" "value"
Вот решение:
preg_replace('/([^:]*):/i', '"$1" :', 'def1: "some explanation"');
Я заменил ваше регулярное выражение на [^:]*
, что означает все символы кроме :
а потом я получаю это с помощью ()
, который будет в $1
,
Потом переписываю $1
с кавычками и добавить :
который был удален.
Редактировать: цикл в каждой строке и применить preg_replace, и это будет добиваться цели.
Если ваш шаблон будет всегда таким же, как показано в примере, то есть 3 символа и 1 цифра (то есть def1, def2, def3 и т. Д.), Вы можете использовать следующий шаблон:
echo preg_replace('/\w+\d{1}/', '"$0"', 'def1: "some explanation" def2: "other explanation"');
выход:
"def1": "some explanation" "def2": "other explanation"
Другое решение, которое может иметь цифру или символ:
echo preg_replace('/\w+(?=:)/', '"$0"', 'def1: "some explanation" def2: "other explanation" def3: "other explanation" defz: "other explanation"');
Выход:
"def1": "some explanation" "def2": "other explanation" "def3": "other explanation" "defz": "other explanation"
Объяснение вышеуказанного решения:
\w Word. Matches any word character (alphanumeric & underscore).
+ Plus. Match 1 or more of the preceding token.
(?= Positive lookahead. Matches a group after the main expression without including it in the result.
: Character. Matches a ":" character (char code 58).
)
Оба решения заменят все происшествия.