Php Regex仅用于URL中的特定域名

Php Regex仅用于URL中的特定域名,php,regex,Php,Regex,尽管我试了很多次,但似乎找不到正确的正则表达式来定位我要找的东西 我只想从以下列表中选择与域www.myweb.com匹配的url的第一个实例 Some text https://www.myweb.com/page/cat/323123442321-rghe432 and then another https://www.adifferentsite.com/fsdhjss/erwr 我需要完全忽略第二个urlwww.adifferencesite.com,只处理与www.myweb.com

尽管我试了很多次,但似乎找不到正确的正则表达式来定位我要找的东西

我只想从以下列表中选择与域www.myweb.com匹配的url的第一个实例

Some text https://www.myweb.com/page/cat/323123442321-rghe432 and then another https://www.adifferentsite.com/fsdhjss/erwr
我需要完全忽略第二个urlwww.adifferencesite.com,只处理与www.myweb.com匹配的第一个url,忽略www.myweb.com的任何其他可能实例

一旦第一个匹配域被发现,我需要存储它之后的url的其余部分

page/cat/323123442321-rghe432
…转换为一个新变量$newvar,因此

$newvar = 'page/cat/323123442321-rghe432';
我正在努力:

return preg_replace_callback( '/http://www.myweb.com/\/[0-9a-zA-Z]+/', array( __CLASS__, 'my_callback' ), $newvar );
我已经阅读了大量关于如何检测url的文档,但找不到任何关于检测特定url的内容

我真的不懂如何表达正则表达式,所以这个公式是不正确的。任何帮助都将不胜感激


EDIT将问题编辑得更具体一点,希望更容易解决。

您可以使用
preg\u replace\u回调
并将数组传递到匿名函数(或您的自定义回调函数)中,以填充所有必要的URL部分

以下是一份:

结果:

Some text https://embed.myweb.com/page/cat/323123442321-rghe432 and then another https://www.adifferentsite.com/fsdhjss/erwr
Array
(
    [0] => page/cat/323123442321-rghe432
)
几句话:

  • “~\b(https?:/)www.myweb\.com/(\S+)”
    ~
    作为,因此您不必转义
    /
  • 它是用单引号声明的,因此您不必对
    \\S
  • 它匹配并捕获到两个子字符串:
    \b(https?:/)
    (匹配整个单词
    http
    https
    ,后跟
    :/
    )和
    (\S+)
    (匹配一个或多个非空白字符)。这些捕获组在模式中标记为
    (…)
    ,可以通过
    $matches[n]
    访问,其中n是捕获组的id
更新

如果只需要替换URL的第一个匹配项,请将limit参数传递给:


请参见

如果需要匹配,为什么要更换?当你创建一个正则表达式时,你有没有注意正则表达式的分隔符?我猜您会遇到Uknown分隔符错误。我之所以要替换它,是因为我将把链接格式化为一个url格式不同的oEmbed链接。因此,在这个filterRegex之后渲染时会变得非常明智,我只是不明白它是如何工作的。我读了又读,读了又读,但似乎无法掌握正确的方法。好的,我认为您可以使用正则表达式,将
$m[1]
推到“URL的其余部分”的数组中。下面是我的意思的一个示例。这非常有效,但在本例中我不需要数组。我只需要匹配并收集url的第一个实例的url。不使用数组就可以执行此例程吗?您的意思是说您有
一些文本吗https://www.myweb.com/page1 及https://www.myweb.com/page2
您只想更换第一个吗?使用
1
作为
preg\u replace\u callback
的最后一个参数。谢谢@stribizev,这太完美了!使用否定字符类
[^/]*
匹配0个或多个字符,而不是
/
,以保留在URL部分中。看,好的,用<代码>$re='~(https?:/)www\.myweb\.com/([^/]*/[^/]*)\S+\b)~'然后
$result=preg\u replace\u回调($re,函数($m)使用(&$rest){$rest=$m[3];返回$m[1]。“embed.myweb.com/”$m[2];},$str,1)
Some text https://embed.myweb.com/page/cat/323123442321-rghe432 and then another https://www.adifferentsite.com/fsdhjss/erwr
Array
(
    [0] => page/cat/323123442321-rghe432
)
$rest = "";
$re = '~\b(https?://)www\.myweb\.com/(\S+\b)~'; 
$str = "Some text https://www.myweb.com/page/cat/323123442321-rghe432, another http://www.myweb.com/page/cat/323123442321-rghe432 and then another https://www.adifferentsite.com/fsdhjss/erwr"; 
echo $result = preg_replace_callback($re, function ($m) use (&$rest) {
    $rest = $m[2];
    return $m[1] . "embed.myweb.com/" . $m[2];
}, $str, 1) . PHP_EOL;
//-LIMIT ^ - HERE -
echo $rest;