正则表达式在每个单词后面加上引号,然后是冒号

时间:2017-04-04 08:22:28

标签: php json regex object-literal

我想在表达定义的每个单词周围加上引号。所有单词都必须用尾随结肠。

例如:

def1: "some explanation"
def2: "other explanation"

必须转换为

"def1": "some explanation"
"def2": "other explanation"

如何用PHP中的preg_replace编写这个?

我有这个:

preg_replace('/\b:/i', '"$0"', 'def1: "some explanation"')

但它只能引用冒号,而不是单词:

key":" "value"

2 个答案:

答案 0 :(得分:5)

以下是解决方案:

value = condition ? 6 : 5;

我已将您的正则表达式替换为preg_replace('/([^:]*):/i', '"$1" :', 'def1: "some explanation"'); ,这意味着除了[^:]*之外的所有字符 然后我使用:来获取它,它将在()中。 然后我使用引号重写$1并添加已删除的$1

编辑:在每一行上循环并应用preg_replace,这样就可以了。

http://ideone.com/9qp8Hv

答案 1 :(得分:0)

如果您的模式总是与您在示例中显示的相同,即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).
) 

这两种解决方案都将取代所有的出现。