我有一个字符串,如下所示:
$string = "New video gameSome TV showAnother item";
我希望能够单独访问每个项目,以获得类似以下输出的内容:
New video game
Some TV show
Another item
如何在字符串或其他随机字符中的每个项目名称之后添加\ n,以后我可以将其分解为数组以单独访问字符串中的每个项目?
答案 0 :(得分:3)
$string = preg_replace('/([a-z])([A-Z])/', "\\1\n\\2", $string);
回答您的评论,以包括以右括号或数字结尾的单词:
$string = preg_replace('/([a-z0-9\)])([A-Z])/', "\\1\n\\2", $string);
答案 1 :(得分:1)
我们(人类)可以区分这些项目,并根据它对我们的意义来识别彼此。但必须给计算机一个标准来做所有这些。
您需要通过简单地添加分隔符(逗号或冒号)来更改存储字符串的方式,并且不要指望计算机在此处阅读我们的想法。
答案 2 :(得分:0)
怎么样,
$string = "New video game/nSome TV show/nAnother item";
$string = explode("/n", $string);
print_r( $string);
答案 3 :(得分:0)
这不是尝试分隔项目的好方法。正如已经多次说过的那样,保存自己头痛并使用分隔符,这就是说,这会从给定的字符串返回desied结果。
$my_string = "New video gameSome TV showAnother item";
preg_match_all('/[A-Z]{1}([A-Z]{2,5}|[a-z\s])+/',$my_string, $matches);
var_dump($matches);
但是我确定你会发现更多的案例,如果你继续使用那些没有意义的模式,那么这些案例并不起作用。
[A-Z]{1} - find one uppercase letter
()+ - next pattern one or more times
[A-Z]{2,5}|a-z\s - 2 -5 uppercase letters(for acronyms) OR lowercase letters and spaces
这就是你在这里要求的。祝你好运不要破坏它。
var dump看起来 - 更别提第二部分了。
array(2) { [0]=> array(3) { [0]=> string(14) "New video game" [1]=> string(12) "Some TV show" [2]=> string(12) "Another item" } [1]=> array(3) { [0]=> string(1) "e" [1]=> string(1) "w" [2]=> string(1) "m" } }
答案 4 :(得分:0)
我做了一些比较,有效地寻找大写字母,我只考虑在第一个字符之后的大写字母,而不是在另一个大写字母或空格之前。
<?php
$s = "New video gameSome TV showAnother item";
$i = 0;
$j = 0;
$phrases = array();
$cap_bit = pow(2, 5);
while($j < strlen($s))
{
$n = ord($s{$j});
if(($n & $cap_bit) == 0 &&
($j == 0 || (
ord($s{$j - 1}) & $cap_bit) > 0 &&
$s{$j - 1} != ' ') &&
$j > 0)
{
$phrases[] = substr($s, $i, $j - $i);
$i = $j;
}
$j++;
}
$phrases[] = substr($s, $i);
var_dump($phrases);
结果:
array(3) {
[0]=>
string(14) "New video game"
[1]=>
string(12) "Some TV show"
[2]=>
string(12) "Another item"
}