Quiero poner comillas alrededor de cada palabra que exprese una definición. Todas las palabras deben hacerlo con dos puntos al final.
Por ejemplo:
def1: "some explanation" def2: "other explanation"Debe ser transformado a
"def1": "some explanation" "def2": "other explanation"¿Cómo escribo esto con preg_replace en PHP?
Tengo esto:
preg_replace('/\b:/i', '"$0"', 'def1: "some explanation"')Pero solo cita los dos puntos, no la palabra:
key":" "value"Aquí está la solución:
preg_replace('/([^:]*):/i', '"$1" :', 'def1: "some explanation"'); Reemplacé su expresión regular por [^:]* , lo que significa que todos los caracteres excepto : y luego lo obtengo usando () , que estará en $1 . Luego reescribo $1 con las comillas y agrego el : que había sido eliminado.
Editar: Bucle en cada línea y aplique el preg_replace, y eso hará el truco.
Si su patrón será siempre el mismo que muestra en el ejemplo, es decir, 3 caracteres y 1 dígito (es decir, def1, def2, def3, etc.), entonces puede usar el siguiente patrón:
echo preg_replace('/\w+\d{1}/', '"$0"', 'def1: "some explanation" def2: "other explanation"');producción:
"def1": "some explanation" "def2": "other explanation"Otra solución que puede tener dígitos o caracteres:
echo preg_replace('/\w+(?=:)/', '"$0"', 'def1: "some explanation" def2: "other explanation" def3: "other explanation" defz: "other explanation"');Producción:
"def1": "some explanation" "def2": "other explanation" "def3": "other explanation" "defz": "other explanation"Explicación de la solución anterior:
\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). )Ambas soluciones reemplazarán todas las ocurrencias.