我正在尝试将一些标题分成三部分:
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] =>
)
也许正则表达式不是最好的解决方案?遗憾的是,我不太了解正则表达式:(
答案 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
)
答案 2 :(得分:0)
$subject = "Title: Name -- Edition";
preg_match("/(.+): (.+) -- (.+)/i", $subject, $matches);
因此
$matches[0] == "Title"
$matches[1] == "Name"
$matches[2] == "Edition"
未经测试