Php Preg_match_所有表达式都有效,但不是所有变量都有效?奇怪的

Php Preg_match_所有表达式都有效,但不是所有变量都有效?奇怪的,php,regex,preg-match-all,Php,Regex,Preg Match All,至少,一个preg_match_all问题并不是严格意义上的正则表达式 这是一个Word Press插件,我扩展了一个插件,用Wordpress脚注替换Word脚注。现在我还想替换一些Word表单代码(如果您感兴趣,我将用Zotpress中的短代码替换Word中的Zotero字段)。此类字段的字符串可以如下所示: {ADDIN ZOTERO_项目CSL_引文{“引文ID”:“klJTkj1B”,“财产”:{“格式引文”:“{\rtf Vivia Sequera,\uc0\u8220{}强奸未遂是

至少,一个preg_match_all问题并不是严格意义上的正则表达式

这是一个Word Press插件,我扩展了一个插件,用Wordpress脚注替换Word脚注。现在我还想替换一些Word表单代码(如果您感兴趣,我将用Zotpress中的短代码替换Word中的Zotero字段)。此类字段的字符串可以如下所示:

{ADDIN ZOTERO_项目CSL_引文{“引文ID”:“klJTkj1B”,“财产”:{“格式引文”:“{\rtf Vivia Sequera,\uc0\u8220{}强奸未遂是否点燃了委内瑞拉的全国抗议?,\uc0\u8221{\i基督教科学箴言报,2014年2月22日,URL}”,“明文引文”:“Vivia Sequera,“强奸未遂引发了委内瑞拉的全国抗议吗?”,《基督教科学箴言报》,2014年2月22日,URL“},“引文项目”:[{“id”:1080,“uri”:[“U8EBSIQM”],“uri”:[“URL”],“itemData”:{“id”:1080,”键入“:“文章杂志”,“标题”:“强奸未遂引发了委内瑞拉的全国抗议吗?”,“集装箱标题”:“基督教科学箴言报”,“来源”:“基督教科学箴言报”,“摘要”:“学生抗议始于委内瑞拉圣克里斯托瓦尔安第斯大学,强奸未遂女大学生。一周后,抗议演变成暴力的民族起义。”“URL”:“URL”,“ISSN”:“082-729”,“作者”:[ {家庭〉:“SeCar”,“给予”:Vivia“}],“发布”:{“日期部分”:[[“2014”,2,22]},“访问”:{“日期部分”:[[“2014”,4,7]]}}],“模式”:“URL”}

我需要将这样的字符串转换为(我在这里加粗):

[zotpressInText item=“{U8EBSIQM}”]

请注意,这些都在文章中。我已经在这里的regex101()创建了表达式。但是我遇到了另一个奇怪的问题,所以让我们保持简单。要找到字符串的开头,应该是:

/\{\s*ADDIN\sZOTERO_ITEM/
但我现在浪费了4-5个小时,因为以下原因。如果我尝试以下方法:

$pattern2='/{\s*ADDIN ZOTERO_ITEM/';
$content2='[1]{ADDIN ZOTERO_ITEM CSL_引文{“引文ID”:“…然后链接…org/groups/228165/items/U8EBSIQM”],“…CSL引文.json”}”;
preg_match_all($pattern2,$content,$zotfields,preg_SET_ORDER);
打印($zotfields);

这是可行的。我通过打印真实的$content变量并手动复制,将内容放入$content2变量中。但是如果我直接使用&content,它就不起作用了

主要区别在于$content确实有多行。因此,可能有问题。但是正则表达式修饰符m或s也没有帮助


你知道我下一步可以尝试什么吗?

我知道了!我将两个变量都作为ASCII字符进行了回显,并意识到还有第三个不可见字符
”“
在一个变量中。这是UTF8和iso8859_1之间的某个编码错误,这已得到很好的解释

如果内容是有效的JSON格式,则只需使用
JSON_decode()
忘了regex吧。抱歉,它不是JSON格式的。要明确的是:$content变量包含整个博客帖子!:)所以在相关内容之前和之后都有我无法删除的帖子文本!