Preg_match_all表达式有效,但不适用于所有变量?奇怪的

时间:2014-04-09 16:14:09

标签: php regex preg-match-all

至少,preg_match_all问题并不严格关于正则表达式!

对于Word Press插件,我正在扩展一个插件,用Wordpress Footnotes替换Word Footnotes。现在我还要替换一些Word表单代码(如果您有兴趣:我将用Zotpress中的短代码替换Word中的Zotero Fields)。这样一个字段的字符串可能如下所示:

  

{ADDIN ZOTERO_ITEM CSL_CITATION {" citationID":" klJTkj1B"," properties":{" formattedCitation":" { \ rtf Vivia Sequera,\ uc0 \ u8220 {}尝试强奸点燃了委内瑞拉国家抗议活动?,\ uc0 \ u8221 {} \ i Christian Science Monitor \ i0 {},2014年2月22日,URL} "," plainCitation":" Vivia Sequera,“试图强奸点燃委内瑞拉的国家抗议?”,基督教科学箴言报,2014年2月22日,URL"},&#34 ; citationItems":[{" ID":1080,"的URI":[" http://zotero.org/groups/228165/items/ U8EBSIQM " ]" URI":[" URL&#34],"的ItemData" {" ID":1080,"类型&#34 ;"文章杂志","标题":"强奸未遂是否引发了委内瑞拉的国家抗议?"," container-title& #34;:"基督教科学箴言报","来源":"基督教科学箴言报","摘要":"学生抗议在委内瑞拉圣克里斯托瓦尔的安第斯大学开始试图强奸一名大学女子。一周之后,抗议活动沸沸扬扬,成为一场暴力的民族起义。""网址":"网址"," ISSN":" 0882-7729""作者":[{"家庭":" Sequera""给定":" Vivia& #34;}],"发出" {"日期部分":[[" 2014",2,22]]},"访问与#34; {"日期部分":[[" 2014",4,7]]}}}],"模式":"网址"}}

我需要将这些字符串转换成(我在这里加粗):

  

[zotpressInText item =" {U8EBSIQM}"]

请注意,这些都在帖子内。我已经在regex101(http://regex101.com/r/jK0lU1)处创建了表达式。但是我遇到了另一个奇怪的问题,所以让我们保持简单。要查找字符串的开头是:

/\{\s*ADDIN\sZOTERO_ITEM/

但由于以下原因,我现在浪费了4-5个小时。如果我试试这个:

$pattern2 = '/{\s*ADDIN ZOTERO_ITEM/'; $content2 = '[1] { ADDIN ZOTERO_ITEM CSL_CITATION {"citationID":".... then the link ... org/groups/228165/items/U8EBSIQM"]," ... csl-citation.json"} }'; preg_match_all( $pattern2, $content, $zotfields, PREG_SET_ORDER); print_r($zotfields);

这很有效。我通过打印真实的$ content变量并手动复制它而获得的$ content2变量中的内容。但如果我直接使用&内容,它就无法运作。

主要区别在于$ content有多行。所以,也许存在问题。但RegEx修饰符m或s也没有帮助。

我接下来会尝试什么想法?

1 个答案:

答案 0 :(得分:0)

我明白了!我将这两个变量都回显为ASCII字符,并意识到在一个变量中有一个第三个不可见的字符" "。这是UTF8和iso8859_1之间的编码错误,这是非常好的解释here