我必须修复一个YAML文件。我必须检查文件的文本字段(我可以忽略所有其他字段)。如果内容未被引用,我想设置这些引号。
text: - Any text
应该返回
text: "- Any text"
所以我逐行检查原始文件以创建一个新文件:
while(!feof($file)){
$line = fgets($file);
$re = "/text:\s*\K([^\"]+?)$/m";
$subst = "\"$1\"";
$result = preg_replace($re, $subst, $line);
fwrite($new_file, $result); // Write line to a new file
}
但如果文本有多行,那么它就不起作用了。
这就是目前发生的事情:
text: - Any text\n
which has more
then one
line
format: do nothing with that
这应该是:
text: "- Any text\n
which has more
then one
line"
format: do nothing with that
如果缺少多行,我如何查看并添加引号? 如果已经设置了引号,则这些行不会发生任何事情。
答案 0 :(得分:1)
您可以使用:
$result = preg_replace('/text:\s*\K(.+?)(?=\R^\w+: )/ms', "$1", $line);
(?=\R^\w+: )
是预测,确保匹配,直到下一行为word:
答案 1 :(得分:0)
text:\s*\K([\s\S]+?)(?=\n[^\s]+|$)
试试这个。"$1"
。见。演示。
https://regex101.com/r/iS6jF6/14
$re = "/text:\\s*\\K([\\s\\S]+?)(?=\\n[^\\s]+|$)/i";
$str = "text: - Any text\ntext: - Any text\n\n which has more\n then one\n line\nformat: do nothing with that\ntext: - Any text";
$subst = "\"$1\"";
$result = preg_replace($re, $subst, $str);
答案 2 :(得分:0)
试试这个
<?php
$str="Text: -any text";
$pattren=array();
$pattern[0]="/\-/";
$replacement=array();
$replacement[0]="\"-";
echo preg_replace($pattern,$replacement,$str);?>