Regex ставить кавычки вокруг каждого слова с последующим двоеточием

Я хочу поставить кавычки вокруг каждого слова, выражающего определение. Все слова должны сделать это через двоеточие.

Например:

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"

3

Решение

Вот решение:

preg_replace('/([^:]*):/i', '"$1" :', 'def1: "some explanation"');

Я заменил ваше регулярное выражение на [^:]*, что означает все символы кроме :
а потом я получаю это с помощью (), который будет в $1,
Потом переписываю $1 с кавычками и добавить : который был удален.

Редактировать: цикл в каждой строке и применить preg_replace, и это будет добиваться цели.

http://ideone.com/9qp8Hv

5

Другие решения

Если ваш шаблон будет всегда таким же, как показано в примере, то есть 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).
)

Оба решения заменят все происшествия.

0

По вопросам рекламы [email protected]