Подскажите по регулярному выражению
124 сообщения
#15 лет назад
Нужно выделить первые буквы слов в предложении - Best One Company, т.е BOC . Делал в конструкторе получилось /\b()/g, но в php она не срабатывает.
124 сообщения
#15 лет назад
В таким виде оно у меня выделает первую букву только, я вот так извлекаю:preg_match("/\b()/", $content, $matches);
$item = $matches.$matches.$matches.$matches;
Может не верно?
55 сообщений
#15 лет назад
Лучше сделать так:$pattern = "/\b()/";
$subject = "Best One Company";
preg_match_all($pattern, $subject, $matches);
$item = implode($matches);
с вас проект
3240 сообщений
#15 лет назад
Цитата ("storier"):$pattern = "/\b()/";
$subject = "Best One Company";
preg_match_all($pattern, $subject, $matches);
$item = implode($matches);
Конструкция () в данном случе избыточна, достаточно указать \w
Рекомендую упростить регексп:
$pattern = '/\b\w/';
3240 сообщений
#15 лет назад
Ну или реплейсом можно, в одну строку:$subject = "Best One Company";
echo preg_replace('|\W*(\w)\w*\W*|', '$1', $subject);
P.S.
Кстати, а по условию задачи цифры и знак подчеркивания считаются ли словами?
Если не считаются, то \w не подходит.
В этом случае или заменяйте \w на (если используете только английский алфавит), или оставляйте \w но потом еще одним регекспом удаляйте цифры и подчеркивания, или же используйте следующее выражение (рекомендую):
echo preg_replace('|]*(])]*]*|', '$1', $subject);
3240 сообщений
#15 лет назад
Способ с preg_replace работает в полтора-два раза быстрее:<?php
$subject = "11 Best 22 One,!Company 333 тест 44";
$t1 = microtime(true);
for ($i = 0; $i < 100000; ++$i) {
preg_match_all('/\b]/', $subject, $matches);
$a = implode($matches);
}
printf("%0.3f\n", microtime(true) - $t1);
$t1 = microtime(true);
for ($i = 0; $i < 100000; ++$i) {
$a = preg_replace('|]*(])]*]*|', '$1', $subject);
}
printf("%0.3f\n", microtime(true) - $t1);
У меня выводит:
1.014
0.495