PHP 用 URL 替换字符串中的模式

标签 php regex url square-bracket

我有几百个 html 文件想要在网站上显示。 它们都包含以下格式的链接:

[My Test URL|https://www.mywebsite.com/test?param=123]

问题是一些网址被分割成这样:

[My Test URL|https://www.mywebsite.c om/test?param=123]

我想用 HTML 对应部分替换所有这些:

<a href="https://www.mywebsite.com/test?param=123">My Test URL</a>

我知道使用正则表达式“/[(.*?)]/”我可以匹配括号,但如何通过管道分割、删除 URL 中的空格并将所有内容转换为字符串?

最佳答案

如果您只想删除这些 Markdown 链接中 URL 部分的(空白)空格,您可以仅使用 preg_replace ,例如

preg_replace('~(?:\G(?!\A)|\[[^][|]*\|)[^][\s]*\K\s+(?=[^][]*])~', '', $text)

请参阅regex demo详细信息:

  • (?:\G(?!\A)|\[[^][|]*\|) - 上一场比赛的结束或 [,然后是除 []| 之外的零个或多个字符,然后是 | char
  • [^][\s]* - 除 [] 和空格之外的零个或多个字符
  • \K - 丢弃迄今为止匹配的所有文本
  • \s+ - 一个或多个空格
  • (?=[^][]*]) - 除 [] 之外,必须有零个或多个字符,然后紧邻当前位置右侧的 ]

如果你想删除 URL 部分中的空格并将 markdown 转换为 HTML,你最好使用 preg_replace_callback:

$text = '[My Test URL|https://ww w.mywebsite.c om/t  est?param=123]';

echo preg_replace_callback('/\[([^][|]*)\|([^][]+)]/', function($m) {
    return '<a href="' . str_replace(' ', '', $m[2]) . '">' . $m[1] . '</a>';
}, $text);

请参阅PHP demo详细信息:

  • \[ - 一个 [ 字符
  • ([^][|]*) - 第 1 组:除 [] 之外的任何零个或多个字符>|
  • \| - | 字符
  • ([^][]+) - 第 2 组:除 ][
  • 之外的任何一个或多个字符
  • ] - ] 字符。

关于PHP 用 URL 替换字符串中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70534848/

相关文章:

php - Yii2配置无效: ApcCache requires PHP apc extension to be loaded

regex - 如何使用正则表达式突出显示搜索到的单词

javascript - 正则表达式后向 : Invalid regular expression:/(? <=\.)\S+$/: 无效组

R - 是否可以优化或简化对 grepl() 的多次调用?

php - 在 PHP 脚本完成时重定向到指定的 URL?

php - 安装 PHPUnit 'unknown channel "时出错 pear.phpunit.de"in "pear.phpunit.de/PHPUnit"'

php - 使用ajax分页获取查询字符串

java - 如何使用 Jsoup 解析相对 url?

c# - .NET 3.5CF WebRequest 到 Slim Framework

wordpress - 在 WordPress 中管理子目录的最佳做法是什么?