Регулярные выражения - парсинг на предложения

GrayMaster

Новичок
Регулярные выражения - парсинг на предложения

Добрый день !
Подскажите пожалуйста как составить такое регулярное выражение, которое в $regs запишет все предложения текста (на англ.).
Допустим есть текст:
Bla-bla-bla fioahs asdioasdh asdhos, aosdhsao, asio 124 ss. Text 2 asd asiosioas, asjiasiods , asojasdioasd. | 142791248 asdis jasiodjasasd masjasdps Eto poslednee predlojenie!

Результат:
$regs[0] = "Bla-bla-bla fioahs asdioasdh asdhos, aosdhsao, asio 124 ss.";
$regs[1] = "Text 2 asd asiosioas, asjiasiods , asojasdioasd.";
$regs[2] = "Eto poslednee predlojenie!";

т.е. в предложении может содержаться "A-Z" "a-z" "0-9" "-" ",".

Заранее благодарен.
 

GrayMaster

Новичок
Подправил твой код, получилось:
PHP:
preg_match_all("/([A-Z]{1}[\w\d\s\-\,]+[\.\!]{1})/s", $content, $matches);
Работает...

Новая проблема - в результат попадают предложения из одного слова. Как это избежать ?
PHP:
...
    [15] => JavaScript1.
    [16] => JavaScript1.
    [17] => Version.
    [18] => JavaScript1.
    [19] => JavaScript1.
    [20] => Version.
    [21] => JavaScript1.
    [22] => JavaScript1.
...
-~{}~ 21.07.05 19:00:

Как установить минимальное кол-во слов в предложении ?
 

Profic

just Profic (PHP5 BetaTeam)
GrayMaster
Только человек может понять где начинается и заканчивается предложение. И только тогда когда язык на котором оно написано ему понятно. Поэтому никакой регулярник тут не поможет.
Минимальное кол-во слов? А как тебе такое:
- Oh, no!
- Don't hesitate, it's too late.
- No!
- Shut up, and relax, all'll be fine. That's all I can promise you.

PS. Какой-то "текст" странный. Откуда там JavaScript?
 

GrayMaster

Новичок
Ну вот такой вот :) Попадается...
А мне "oh, no !" даже и не нужно...

-~{}~ 21.07.05 19:27:

Вот такой ещё вопрос... Как сделать чтоб не брались предложения типа: HELLO WORLD. т.е. большими буквами. как это исключить ? Догадки есть, но на практике получается неправильно выражение :)
 

Profic

just Profic (PHP5 BetaTeam)
~[A-Z][a-z\d]*(?:[\s,-]+[a-z\d]+)*[.!](?=\s)~
Это для абсолютно "правильных" "предложений".
 

GrayMaster

Новичок
а всё же как можно получить предложения с 1-м и более пробелами ?

То что ты предложил выдает: "This.", "Abc.".. :(

-~{}~ 21.07.05 21:06:

Костыль найден :)
PHP:
/[A-Z][a-z\d]*(?:[\s,-]+[a-z\d]+)(?:[\s,-]+[a-z\d]+)(?:[\s,-]+[a-z\d]+)*[.!](?=\s|<|$)/
 

SelenIT

IT-лунатик :)
Имхо, все немного проще:
~[A-Z].*?[.!?](?=\s|$)~s
если речь идет именно о тексте, а не об HTML (на что намекает < в последнем варианте).
 

Lews

Новичок
В предложении только "A-Z" "a-z" "0-9" "-" "," ?
А не проще тогда разбить текст по "!" "?" и "." ?
 

GrayMaster

Новичок
Это HTML, но мне нужно вытащить только предложения со страницы... Что я и делаю.
А не проще тогда разбить текст по "!" "?" и "." ?
Нет, регулярным выражением все решается одной строкой :)

-~{}~ 22.07.05 01:42:

И последний вопрос...
PHP:
/[A-Z][\w\d]*(?:[\s,-]+[\w\d]+)(?:[\s,-]+[\w\d]+)(?:[\s,-]+[\w\d]+)*[.!?](?=\s|<|$)/
Сделал что в предложении могли встечаться большие буквы... Как теперь изменить выражение, чтоб не выделялись предложения типа "HELLO WORLD.".
 

specialist

Guest
GrayMaster
обрати внимание на пост SelenIT, твоя же регулярка слишком запутана..имхо..если ты сумел её написать, то сделать так, что бы встречались большие буквы не должно составить для тебя труда...
 
Сверху