正则表达式/通配符替换字符串PHP
我有大量的文本被加载到标题中,其中包含此链接.
<link rel="canonical" href="could_be_anything_here_at_all" /> 我想用一个新值替换它,但href根据页面改变意味着一个简单的str_replace是不可能的. 我已经看过使用preg_replace了,但是无法理解看似简单的问题. $regex = '/(^<link rel="canonical")(/>$)/'; $match = preg_match_all($regex,$content,$matches); var_dump($matches); > //开始和结束表达式? 所以我正在寻找以< link rel =“canonical”开头并以/>结尾的字符串 我已经展示了我正在追求的步骤,以及我对它的刺痛.请帮我写,最后了解如何做.我真的很茫然. 解决方法
你写的正则表达式遍布整个地方.让我们来看看这个模式:
无论发生什么,它都将以< link开头并以>< / link>结束.或/> (必须考虑那些讨厌的不尊重标准的网络海盗).你正在寻找rel参数,如果它有一个,它需要是规范的. 我们可以开始编写正则表达式:#< link([^>])(/> |>< / link>)#is.这将映射所有链接标记.然后,您可以使用简单的strpos调用来解析参数. 如果您确定rel =“canonical”将是链接标记的第一个参数,您可以将正则表达式进一步扩展为#< link rel =“canonical”href =“?'?([^”']) “?'?(/> |>< / link>)#is.这将按顺序映射它,如果您确定这将是订单,这很好. 按出场顺序: 除了>之外,[^>]匹配任何内容角色一次或多次 标志代表:不区分大小写,不要在换行符中断 “?’?匹配0或1”,后跟0或1′ 如果还有其他不清楚的地方,请告诉我. 编辑:回答你的问题 > //开始和结束表达式?他们被称为分隔符,他们“包围”表达. Perl正则表达式引擎允许设置关于表达式(i,s,g,b等)的标志,并且这些标志必须在表达式之外.他们追求分隔符 – 这是分隔符的要点.你可以使用你喜欢的任何角色 – 它将选择最远的两个重复角色.人们倾向于使用/由于JS使用单个字符串 – 我倾向于在PHP中使用#来清除因关闭HTML标记而产生的歧义.>()表示必须匹配要返回的字符串的单独“表达式”?()匹配一个子集,如果为匹配项指定变量,则允许您将其返回到结果中.正则表达式的每个部分都可以使用通配符& co,但只包含在()中的东西将在比赛中返回> ^过滤以下列字符串开头的结果?不. []范围之外的^将匹配以下列字符串句点开头的任何内容.在一条新的路线上,有效而不仅仅是“言语”.>结果以以下字符串结尾的$过滤器?与上面相同,只是“结束”而不是“开始”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |