在两个白名单单词之一之前的空格上拆分字符串

问题描述 投票:0回答:3

我有这样的字符串:

wh4tever_(h4r4ct3rs +syMb0|s! ASC
wh4tever_(h4r4ct3rs +syMb0|s! DESC

我不知道第一个字符是什么,但我知道它们以

' ASC'
' DESC'
结尾,我想拆分它们,以便得到一个像这样的数组:

array(
    [0] => 'wh4tever_(h4r4ct3rs +syMb0|s!'
    [1] => 'ASC' //or 'DESC'
)

我知道使用

preg_split()
一定非常容易,但正则表达式是我认为我永远无法很好地使用的东西......

php regex split
3个回答
3
投票

您可以将以下正则表达式与

preg_split()
一起使用:

\s(?=(ASC|DESC))

说明:

  • \s
    - 匹配任何空白字符
  • (?=
    - 正向前瞻的开始
    • (ASC|DESC)
      -
      ASC
      DESC
  • )
    - 正向前瞻结束

可视化:

enter image description here

完成:

$str = 'wh4tever_(h4r4ct3rs +syMb0|s! ASC';
$arr = preg_split('/\s(?=(ASC|DESC))/', $str);
print_r($arr);

输出:

Array
(
    [0] => wh4tever_(h4r4ct3rs +syMb0|s!
    [1] => ASC
)

演示


3
投票

试试这个,

$str = "wh4tever_(h4r4ct3rs +syMb0|s! ASC";
$str1 = "wh4tever_(h4r4ct3rs +syMb0|s! ASC";


$ar = preg_split('/(ASC|DESC)/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$ar1 = preg_split('/(ASC|DESC)/i', $str1, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

print_r($ar);
print_r($ar1);

输出: 数组 ( [0] => wh4tever_(h4r4ct3rs +syMb0|s! [1] => ASC ) 数组 ( [0] => wh4tever_(h4r4ct3rs +syMb0|s! [1] => DESC )


2
投票

您可以使用这个正则表达式:

\s(?=(A|DE)SC)

然后将其分开。

正如 sshashank124 所指出的,它是一个非常好的工具,与语言无关。

© www.soinside.com 2019 - 2024. All rights reserved.