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;
}
?>
我有一个以“*”或“^”结尾的字符串。
例如:
$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;
}
?>