preg_split正则表达式对不同的字符

时间:2013-11-30 23:49:41

标签: php regex preg-split

我正在尝试将一些标题分成三部分:

Title: Name -- Edition

我想把这些字符串分成

Array
(
    [0] => Title
    [1] => Name
    [2] => Edition
)

这些标题可能没有版本,名称字段或其中任何一个。

非常感谢任何有关此正则表达式的帮助。

修改

感谢大家的答案 - 我实际上写得很快,因为我不得不在下一分钟走出去。 “标题”“名称”和“版本”可以包含其他字符可能我不完全确定但是有可能。例如:这是标题?:特定名称012 - 个人版!!

这些字符(如果出现)将始终是唯一的( -

我会在早上查看每个人的答案,谢谢你的所有答案。

编辑#2

要澄清一点,标题可能包含也可能不包含名称&因此,这些也是可能的:

这是标题! - 版本?? 应返回:

Array
(
    [0] => This is the title!
    [1] => 
    [2] => An Edition??
)

或者

这是标题!:名称.. 应返回

Array
(
    [0] => This is the title!
    [1] => A Name..
    [2] => 
)

或者只是

这是标题!应返回

Array
(
    [0] => This is the title!
    [1] => 
    [2] => 
)

也许正则表达式不是最好的解决方案?遗憾的是,我不太了解正则表达式:(

3 个答案:

答案 0 :(得分:2)

您可以使用preg_match_all()

$str = 'Title: Name -- Edition';
preg_match_all('/\w+/', $str, $matches);
var_dump($matches[0])

收率:

array(3) {
  [0] =>
  string(5) "Title"
  [1] =>
  string(4) "Name"
  [2] =>
  string(7) "Edition"
}

希望这会有所帮助:)

答案 1 :(得分:2)

当标题,名称或版本不只是一个单词时,这应该有效:

preg_match("/([^:-]+(?=(?::|--|$))) (?::\s)? ([^(--)]*(?=(?:--|$))) (?:--\s)? (.*)/x", 'Long Title: With Long Name -- And an Edition', $output);

$输出:

Array
(
    [0] => Long Title: With Long Name -- And an Edition
    [1] => Long Title
    [2] => With Long Name
    [3] => And an Edition
)

Regular expression visualization

Debuggex Demo

答案 2 :(得分:0)

$subject = "Title: Name -- Edition";
preg_match("/(.+): (.+) -- (.+)/i", $subject, $matches);

因此

$matches[0] == "Title"
$matches[1] == "Name"
$matches[2] == "Edition"

未经测试