使用PHP和REGEX从URL获取文本

时间:2018-07-31 16:21:25

标签: php regex joomla

我在Joomla中工作,需要根据当前URL即时更改文本,以便为服务创建“区域页面”。我正在使用一个允许我插入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个区域,所以不需要所有这些代码。我正在寻找一种可能使用正则表达式的方法,但对不起,我不知道如何使用它。希望有专家。

我所有的网址都是这样构成的;

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';}

对于每个区域页面。我想我想在计算机修复/区域名称后提取位置名称,并在下一个之后删除其余位置-(还要使区域名称成为大写字母。

随后我可以回显$ area。如果某个页面的URL不符合规定,我也需要if语句。

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参见regex demo

详细信息

  • /Computer-Repair/-文字Subtring
  • \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])将使首字母大写。