使用 PHP 和 REGEX 从 URL 获取文本

Get text from URL with PHP and REGEX

我在 Joomla 工作,需要根据当前 URL 即时更改文本,以便我可以为我的服务创建 "area pages"。我正在使用一个允许我插入 PHP 的模块,所以这就是我正在使用的;

这是我复制粘贴的代码;

<?php $activeURL=basename($_SERVER['REQUEST_URI']); 
if (strpos($activeURL, 'paddington') !== false) { $area='Paddington';}
if (strpos($activeURL, 'clapham') !== false) { $area='Clapham';}
if (strpos($activeURL,'brixton') !== false) { $area='Brixton';}

echo $area . '<br/>' . "\n";

echo 'SysFix provide a wide range of computer repair services throughout '; 
echo $area; 
echo ', London and the UK. A member of our highly skilled, technical support team will visit you at home to provide assistance with you computer issues.';
echo '<br/>' . "\n";
echo '<br/>' . "\n";
echo 'As well as on site computer repairs, we also provide technical support over the internet using our remote support software which not only saves you money but is quicker too.';

我正在做的是查看 URL,如果它包含一个单词(paddington、clapham 或 brixton),则使用大写字母设置一个变量以实现该效果,然后在整个过程中回显该变量我的静态文本(文章),这样它看起来不像是指一个区域的重复内容。

注意事项 我有大约 100 个区域,所以不需要所有这些代码。我正在寻找一种可能改用正则表达式的方法,但抱歉,我不知道如何使用它。希望有专家。

我所有的URL都是这样构成的;

https://www.sysfix.co.uk/Computer-Repair/clapham-sw4.html

https://www.sysfix.co.uk/Computer-Repair/brixton-sw2.html

https://www.sysfix.co.uk/Computer-Repair/marylebone-w1-w1m-nw1.html

那么有没有更好的方法来做到这一点,而不是创建其中的 100 个;

if (strpos($activeURL, 'paddington') !== false) { $area='Paddington';}

每个区域页面。我想我想在 Computer-Repair/AREANAME 之后提取位置名称并在下一个之后丢弃其余的 - (也使区域名称成为大写字母。

然后我可以随后回显 $area。我也需要一个 if set 语句,以防某个页面的 url 不符合?

您可以使用

'~/Computer-Repair/\K[\w-]*?(?=-[a-z]*\d|$)~'

参见regex demo

详情

  • /Computer-Repair/ - 文字子串
  • \K - 匹配重置运算符,省略当前匹配的文本
  • [\w-]*? - 0+ 个单词或 - 个字符尽可能少,直到第一个...
  • (?=-[a-z]*\d|$) - -,然后是 0+ 小写 ASCII 字母 ([a-z]*),然后是任何数字 (\d) 或 (|)字符串结尾 ($).

参见 PHP demo:

$strs = ['/Computer-Repair/lancaster-gate-w2.html', '/Computer-Repair/marylebone-w1-w1m-nw1.html', '/Computer-Repair/covent-garden-wc2.html', 'https://www.sysfix.co.uk/Computer-Repair/clapham-sw4.html','https://www.sysfix.co.uk/Computer-Repair/brixton-sw2.html', 'https://www.sysfix.co.uk/Computer-Repair/marylebone-w1-w1m-nw1.html'];
foreach ($strs as $s){
    if (preg_match('~/Computer-Repair/\K[\w-]*?(?=-[a-z]*\d|$)~', $s, $m)) {
        echo preg_replace_callback('~(-)?\b(\w)~', function ($x) { 
            return (isset($x[1]) && strlen($x[1]) ? " " : "") .  ucfirst($x[2]);
        }, $m[0]) . "\n";
    }
}

输出:

Lancaster Gate
Marylebone
Covent Garden
Clapham
Brixton
Marylebone

注意 ucfirst($x[2]) 会使第一个字母大写。