如何打印字符串中包含特定字母的所有单词,例如:
$words = "lernen spielen betteln lachen example";
$EndsWith=['en','eln'];
在这个示例中,除了单词示例之外,应该打印所有内容。
我只知道如何找到substr
的字符,但这只适用于字符串中的最后一个字。
答案 0 :(得分:3)
您可以使用正则表达式:
([A-Za-z]+(?:en|eln))\b
找到以en
或eln
结尾的单词,假设您认为某个单词只包含alpha ascii字符。您可以修改字符类以包含更多" word"字符。
正则表达式演示:https://regex101.com/r/7i5iS8/1/
PHP用法:
$words = "lernen spielen betteln lachen example";
$EndsWith=['en','eln'];
preg_match_all('/([A-Za-z]+(?:' . implode('|', array_map('preg_quote', $EndsWith)) . '))\b/', $words, $words_that_end);
print_r($words_that_end[1]);
此处的preg_quote
包含$EndsWith
中的任何值都包含保留的正则表达式字符,例如.
。如果您将.
传递给正则表达式,则字符表示任何不是新行的单个字符,而您确实需要文字.
。在正则表达式中,它必须是\.
或[.]
;这个函数适合你(它使用\.
语法)。
如果$EndsWith
中的所有字符始终为字母,则您不需要该功能。下面的演示显示了不使用它的用法。
此答案还假定en
和eln
不是单词。
答案 1 :(得分:0)
您可以使用preg_split将字符串拆分为数组。
$words = preg_split('/\s+/', 'lernen spielen betteln lachen example');
这将生成数组:
Array (
[0] => lernen
[1] => spielen
[2] => betteln
[3] => lachen
[4] => example
)
从那里你可以迭代数组,并检查每个单词是否以$endsWith
元素之一结束。
$wordsThatEndWith = [];
foreach ($words as $word) {
foreach ($endsWith as $endWith) {
if (substr($word, -strlen($endWith)) === $endWith) {
$wordsThatEndWith[] = $word;
}
}
}
$wordsThatEndWith
现在将是一个数组,其中包含以任何元素结尾的所有单词:
Array
(
[0] => lernen
[1] => spielen
[2] => betteln
[3] => lachen
)
答案 2 :(得分:0)
按空格分解字符串以分别获取每个单词,然后迭代然后检查它是否以数组中的某些内容结束。
$words = explode(' ', $words);
foreach($words as $word) {
foreach($EndsWith as $end) {
if(substr($word, -strlen($end)) === $end) {
echo $word;
}
}
}