PHP正则表达式'*'

时间:2017-09-26 10:06:05

标签: php explode preg-split

我有一个以'*'或'^'结尾的字符串。
例如:

$variable = 'abcdef**^^';

我使用preg_split()函数来分割字符串。

$variable = 'abcdef*^^^^';
$words = preg_split("/(?<=\w)\b[!?.]*/", $variable, -1, PREG_SPLIT_NO_EMPTY);

我的输出为

Array
(
    [0] => abcdef
    [1] => *^^^^
)

但是当我的变量被'@',''和其他一些特殊字符替换时,问题就开始了 例如:

$variable = 'abc@d ef*^^^';  

输出变得像这样

Array
(
    [0] => abcd
    [1] => @ ef
    [2] => *^^^^
)

我需要像这样的输出

Array
(
    [0] => abcd@ ef
    [1] => *^^^^
)

我试图用RegEx替换当前的RegEx for'*'和'^',但我找不到。

4 个答案:

答案 0 :(得分:3)

使用\*代表明星。以下是示例

<?php

$variable = 'abc@d ef*^^^';
$words = preg_split("/\*/", $variable, -1, PREG_SPLIT_NO_EMPTY);
echo "<pre>";
print_r($words);  
?>

它的输出是

Array
(
    [0] => abc@d ef
    [1] => ^^^
)

如果你想添加*然后使用这个

<?php

$variable = 'abc@d ef*^^^';
$words = preg_split("/\*/", $variable, -1, PREG_SPLIT_NO_EMPTY);

$i=0;  
foreach ($words as $value) {
    if($i != 0)
    {
        $words[$i]='*'.$words[$i];
    }
    $i++;
}

echo "<pre>";
print_r($words);
?>

答案 1 :(得分:1)

如果我抓住问题的真正含义,OP提到了

  

我有一个以'*'或'^'结尾的字符串。

如果要以这种方式拆分字符串,则应该像这样更改正则表达式。

$words = preg_split("/[\*|\^]/", $variable, 2, PREG_SPLIT_NO_EMPTY);  

这会在*或^的第一次并发时破坏字符串。 OP已经排除了一个答案,但我正在添加我的,以防它在这种情况下帮助其他任何人。

编辑:如果您想这样做,则无需使用preg_split()。只需在几个条件下使用strstr。

$variable = 'abcd@ ef*';
if ( strpos( $variable, '*' ) < strpos( $variable, '^' ) || strpos( $variable, '^' ) === false ) 
{
    $first = strstr($variable, '*', true);
    $last = strstr($variable, '*');
}
if ( strpos( $variable, '^' ) < strpos( $variable, '*' ) || strpos( $variable, '*' ) === false ) 
{
    $first = strstr($variable, '^', true);
    $last = strstr($variable, '^');
}

echo $first;
echo '<br/>';
echo $last;

这个正在研究每个案例。

答案 2 :(得分:1)

感谢您的所有答案 我已经通过你们所提供的参考资料找到了我的解决方案 我发布它,可能在将来帮助任何人..

<?php

$variable = 'Chloride TDS';
if (preg_match('/[\*^]/', $variable))
{
if ( strpos( $variable, '*' ) < strpos( $variable, '^' )   || strpos( $variable, '^' ) === false ) 
{
    $first = strstr($variable, '*', true);

    $last = strstr($variable, '*');
}

if ( strpos( $variable, '^' ) < strpos( $variable, '*' ) && strpos($variable,'^') != '' || strpos( $variable, '*' ) === false ) 
{
    $first = strstr($variable, '^', true);
    $last = strstr($variable, '^');
}
echo $first;
echo '<br/>';
echo $last;
}else{
    echo $variable;
}



?>

答案 3 :(得分:0)

如果你的分裂字符只是“*”,你可以使用explode:

$words = explode('*', $string, 2);

如果是“*”或“^”,请执行以下操作:

$words = preg_split("/[\*,\^]+/", $str, -1, PREG_SPLIT_NO_EMPTY);