如何检查多行的字符串并引用它?

时间:2015-03-12 09:13:03

标签: php regex

我必须修复一个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

如果缺少多行,我如何查看并添加引号? 如果已经设置了引号,则这些行不会发生任何事情。

3 个答案:

答案 0 :(得分:1)

您可以使用:

$result = preg_replace('/text:\s*\K(.+?)(?=\R^\w+: )/ms', "$1", $line);

RegEx Demo

(?=\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);?>
  

演示https://eval.in/299211