在两种模式之一之前返回文本

时间:2012-11-27 01:19:53

标签: php regex

我有以下两个字符串:

$str='http://website.com/abc/?var=abc';
$str='http://website.com/abc/?xvar=123&var=xyz';

我想使用PHP将$ str更改为“?var =”或“& var =”之前的所有内容。

例如,给出两个示例,$ str将转换为:

$str='http://website.com/abc/';
$str='http://website.com/abc/?abc=123';

谢谢

以下方式测试了解决方案:

<?php
    $str='http://website.com';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');
    $str='http://website.com/';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');
    $str='http://website.com/abc';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');
    $str='http://website.com/abc/';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');
    $str='http://website.com/abc/?var=abc';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');
    $str='http://website.com/abc/?xvar=123&var=xyz';
    echo('string-'.$str.'<br>');
    echo('opt1-'.opt1($str).'<br>');
    echo('opt2-'.opt2($str).'<br>');

function opt1($str) {
    return preg_replace('/[?&]var=.*$/', '', $str);
}
function opt2($str) {
    preg_match('/(.*)[\?\&]var=/',$str2,$m);
    return $m[1];
}

?>

3 个答案:

答案 0 :(得分:0)

假设您在第二个示例中表示$str='http://website.com/abc/?xvar=123';,这应该有效:

preg_match('/(.*)[\?\&]var=/',$str2,$m);
echo $m[1];

答案 1 :(得分:0)

您可以使用strstr并在?var之前检索字符串,

$str = strstr($str, "?var=", true);
echo str; //outputs - http://website.com/abc/
//Similarly for the other needle
$str = strstr($str, "&var=", true);
echo $str; //outputs - http://website.com/abc/?abc=123

答案 2 :(得分:0)

$str = preg_replace('/[?&]var=.*$/', '', $str);