PHP 星号“*”的正则表达式

PHP Regular expression for star '*'

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

$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] => *^^^^
)

我试图用“*”和“^”的正则表达式替换我当前的正则表达式,但找不到。

使用 \* 作为星号。下面是例子

<?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);
?>

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

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

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

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

如果我掌握了问题的真正含义,OP 提到了

I have a string ending with '*' or '^'.

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

$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;

这个正在处理每一个案例。

谢谢大家的回答。
我已经根据大家提供的参考资料找到了我的解决方案。
我发布它,可能会在以后帮助任何人..

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



?>