我有一个串在一起的字符串,我需要将它们分开,每个以'A'结尾的单词应该在一个新行上,
item onea second itema third
我还需要检查以'A'结尾的单词是否应该实际上以'A'结尾,如extra或sultana。
item oneasecond itemand an extra item
我在这个网站http://www.morewords.com/ends-with/a中有一个以'A'结尾的单词数组,所以我只需要preg_replace函数。
每当有人在这里回答问题时,我真的在学习,所以再次感谢每个人的时间和耐心
答案 0 :(得分:1)
你可以这样做:
// assoc array keyed on words that end with A
$endsWithA = array("sultana" => 1, ...);
$words = split(' ', $string);
$newString = '';
$finalStrings = array();
foreach ($words AS $w) {
// if it ends with a, check to see if it's a real word.
// if so, end the current string and store it
if (preg_match("/a$/", $w) && !$endsWithA[$w]) {
$w = preg_replace("/a$/","", $w);
$newString .= $w;
$finalStrings[] = $newString;
$newString = '';
}
else {
$newString .= $w . ' ';
}
}
// Get any remaining newString
if ($newString) $finalStrings[] = trim($newString);
print_r($finalStrings);
没有测试过,等等,但它会给你一个数组$ finalStrings,其中填充了从原文中拆分的字符串。
更新:修复了代码中的几个拼写错误。
答案 1 :(得分:0)
考虑到explode()
字符串可能有用,以便将其分隔为单词数组:
$words = explode(' ', $string);
如果他们被空格隔开。
然后你可以循环遍历数组$words
并检查每个数组的最后一个'a',如果有必要,可以进行缩放。
preg_replace()
并不总能解决您的文本操作需求。
编辑:如果您对preg_replace
的每个元素使用$words
,那么
foreach ($words as $word) {
$word = preg_replace('/(\w)a$/', '\1', $word);
}
注意,我没有尝试过这个,如果这实际上更改数组,我现在不记得了,但我认为正则表达式应该是正确的。重要的概念是 a $ ,即单字符串的 end 处的字母a。我认为这是替换字母(\w
)的正确语法,后面跟一个字母字符串末尾的'a'但是这里很晚了我的大脑可能无法正常工作。
另外,我们没有考虑你的约2900个以'a'结尾的单词列表(其中一些我从来没有听到)
答案 2 :(得分:0)
这听起来更像是 preg_match 的作业。
答案 3 :(得分:0)
不确定'的含义是什么,以'A'结尾的每个单词都应该在新行上'。如果你在输入字符串之外发布实际输出,总是很有用。
你的意思是以'a'结尾的单词后跟一个新行(1)?或者以'a'结尾的单词应该在它之前有一个新行?或者也许是两者的组合,将一个以'a'结尾的单词放在他们自己的行上(在单词之前和之后放置换行符)?
$words = "item onea second itema third";
print_r(preg_split("/\s+(?=\S+a)/i", $words)); // 1
print_r(preg_split("/(?<=a)\s+/i", $words)); // 2
print_r(preg_split("/(?<=a)\s+|\s+(?=\S+a)/i", $words)); // 3