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