我有一个以'*'或'^'结尾的字符串。
例如:
$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'*'和'^',但我找不到。
答案 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);