Регулярное выражение для разбора слов из предложения - PullRequest
2 голосов
/ 05 августа 2010

Мне нужно регулярное выражение для разбора слов из предложения или абзаца. Некоторые разделители, которые следует использовать: пробелы и точки. Итак, в:

My name is Bob.I'm 104 yrs old.

Bob и I'm разделены, хотя между ними нет пробела, кроме точки.

Любые другие обычные разделители слов также должны быть включены.

Ответы [ 5 ]

9 голосов
/ 05 августа 2010

А как насчет str_word_count()?:

Для этой функции слово определяется как строка, зависящая от локали, содержащая буквенные символы, которая также может содержать, но не начинаться с символов «» и «-».

Пример:

$str = "My name is Bob.I'm 104 yrs old."; 
print_r(str_word_count($str, 1, '0123456789'));

дает:

Array
(
    [0] => My
    [1] => name
    [2] => is
    [3] => Bob
    [4] => I'm
    [5] => 104
    [6] => yrs
    [7] => old
)

Третий параметр принимает строку, которая определяет, какие дополнительные символы следует рассматривать как «символы слова».

6 голосов
/ 05 августа 2010
$words = preg_split('#[\\s.]#', $string, -1, PREG_SPLIT_NO_EMPTY);

\\s будет соответствовать всем пробелам (таким как пробел, табуляция, новая строка и т. Д.). . будет соответствовать, ну а . ... Если вы хотите добавить больше символов, просто добавьте их после . (за исключением того, что [, ] и # необходимо экранировать с помощью \\, а - должен быть последним символом в списке) ...

Он вернется к вашему предложению:

array(9) {
  [0]=>
  string(2) "My"
  [1]=>
  string(4) "name"
  [2]=>
  string(2) "is"
  [3]=>
  string(3) "Bob"
  [4]=>
  string(3) "I'm"
  [5]=>
  string(3) "104"
  [6]=>
  string(3) "yrs"
  [7]=>
  string(3) "old"
}
2 голосов
/ 05 августа 2010

Два способа сделать это, включительно или эксклюзивно, разделив один из следующих:

Используйте «символы слова» плюс общие «соединители» (апостроф, дефис и т. Д.) И отрицайте всю группу:

[^\w'-]+

Или укажите, что вы считаете несловесными символами (пробелы, точки, двоеточия, парены и т. Д.):

[\s.;:()]+

(В обоих случаях + позволяет избежать создания пустых групп.)

Определенные символы необходимо экранировать в классах символов - подробности см. http://www.regular -expressions.info / charclass.html

0 голосов
/ 05 августа 2010

взгляните на preg_split

$words = preg_split('/\W+/', $sentence); // split on non-word-characters

это, очевидно, разделит »Я« на ›I‹ и ›m‹

0 голосов
/ 05 августа 2010

Проверьте привязку границы слова (\ b или \ w), чтобы изолировать отдельные слова от пробелов и знаков пунктуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...