正则表达式/通配符替换字符串PHP

前端之家收集整理的这篇文章主要介绍了正则表达式/通配符替换字符串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,但只包含在()中的东西将在比赛中返回> ^过滤以下列字符串开头的结果?不. []范围之外的^将匹配以下列字符串句点开头的任何内容.在一条新的路线上,有效而不仅仅是“言语”.>结果以以下字符串结尾的$过滤器?与上面相同,只是“结束”而不是“开始”.

猜你在找的正则表达式相关文章