Php 正则表达式:在'之后引用字符串;引用:';

Php 正则表达式:在'之后引用字符串;引用:';,php,regex,Php,Regex,如何将定义的字符串(即引用:)后的文本置于引号中(如果尚未引用)?可选行的开头可以有多个空格 cite: Lorem ipsum cite: Lorem ipsum cite: "Already quoted" 应该成为 cite: "Lorem ipsum" cite: "Lorem ipsum" cite: "Already quoted" 我的尝试: preg_replace("/[\s\t]cite:[\s\t]/","",$line); 但我没有正确理解。以下是我

如何将定义的字符串(即
引用:
)后的文本置于引号中(如果尚未引用)?可选行的开头可以有多个空格

cite: Lorem ipsum
    cite: Lorem ipsum
cite: "Already quoted"
应该成为

cite: "Lorem ipsum"
    cite: "Lorem ipsum"
cite: "Already quoted"
我的尝试:

preg_replace("/[\s\t]cite:[\s\t]/","",$line);
但我没有正确理解。以下是我的问题:

  • 开头的空格是可选的,可以是多个空格
  • 我正在搜索
    cite:
    (带空格),我想获得该行的其余部分
  • 将行的其余部分用引号引起来

您可以使用这样的正则表达式:

^(\s*cite: )([\w\s]+)$

并使用替换字符串:

$1"$2"
查看下面的
替换部分:

php代码是:

$re = "/^(\\s*cite: )([\\w\\s]+)$/m"; 
$str = "cite: Lorem ipsum\n    cite: Lorem ipsum\ncite: \"Already quoted\""; 
$subst = "$1\"$2\""; 

$result = preg_replace($re, $subst, $str);
或者使用这种模式

cite:\s*\K([^"]+?)$
并替换为
“$1”

cite:#“cite:”
\s#
*#(零或更多)(贪婪)
\K#
(#捕获组(1)
[^”]#字符不在[^”]
+?#(一个或多个)(懒惰)
)#捕获组结束(1)
$#字符串/行的结尾

对于给出的示例来说,这很好。但前提是“引用:”后面的部分仅为字母/数字/空格。在我的测试中,我做得很快,我使用
(\w.*)
作为最后一部分,它只要求第一个字符是单词字符。否则完全一样。@JonathanKuhn是的,你是对的,但我是基于OP样本数据的。如果他添加更多的样本,我们可以帮助他更准确地操作H,php还使用
$1
/
$2
替换组。
cite:           # "cite:"
\s              # <whitespace character>
*               # (zero or more)(greedy)
\K              # <Reset start of match>
(               # Capturing Group (1)
  [^"]          # Character not in [^"]
  +?            # (one or more)(lazy)
)               # End of Capturing Group (1)
$               # End of string/line