Разорвать строку на даты

0

Я использую следующий сценарий, который я изменил, чтобы разделить большую строку на числа. Однако у меня возникают проблемы с тем, чтобы он также переходил на даты.

Исходный рабочий код:

$re = '/# Split sentences on whitespace between them.
(?<=                # Begin positive lookbehind.
  [.!?:]             # Either an end of sentence punct,
| [.!?:][\'"]
| [\r\t\n]              # or end of sentence punct and quote.
)                   # End positive lookbehind.
(?<!                # Begin negative lookbehind.
  Mr\.              # Skip either "Mr."
| Mrs\.             # or "Mrs.",    
| Ms\.              # or "Ms.",
| Jr\.              # or "Jr.",
| Dr\.              # or "Dr.",
| Prof\.            # or "Prof.",
| U\.S\.A\.
| Sr\.              # or "Sr.",
| T\.V\.A\.         # or "T.V.A.",
| a\.m\.            # or "a.m.",
| p\.m\.            # or "p.m.",
| •\.
| :\.
| •\.

                    # or... (you get the idea).
)                   # End negative lookbehind.
\s+                 # Split on whitespace between sentences.

/ix';

$sentences = preg_split($re, $block_o_text, -1, PREG_SPLIT_NO_EMPTY);
for ($i = 0; $i < count($sentences); ++$i) {

Я добавил [0-9]/[0-9]/[0-9], но, похоже, он не имеет желаемого эффекта. Что мне не хватает? Вот мой обновленный код ниже:

$re = '/# Split sentences on whitespace between them.
(?<=                # Begin positive lookbehind.
  [.!?:]             # Either an end of sentence punct,
| [.!?:][\'"]
| [\r\t\n]          # or end of sentence punct and quote.
| [0-9]/[0-9]/[0-9] # or on a date
)                   # End positive lookbehind.
(?<!                # Begin negative lookbehind.
  Mr\.              # Skip either "Mr."
| Mrs\.             # or "Mrs.",    
| Ms\.              # or "Ms.",
| Jr\.              # or "Jr.",
| Dr\.              # or "Dr.",
| Prof\.            # or "Prof.",
| U\.S\.A\.
| Sr\.              # or "Sr.",
| T\.V\.A\.         # or "T.V.A.",
| a\.m\.            # or "a.m.",
| p\.m\.            # or "p.m.",
| •\.
| :\.
| •\.

                    # or... (you get the idea).
)                   # End negative lookbehind.
\s+                 # Split on whitespace between sentences.

/ix';
  • 0
    Возможно, вам лучше будет создать парсер, чем пытаться создать какое-то чрезвычайно сложное регулярное выражение.
Теги:

1 ответ

1

Даты не имеют только отдельных цифр, особенно в этом году. Вы должны это учитывать. Вам также необходимо избежать / поскольку это ваш разделитель регулярных выражений.

[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню