Для справки, вот регулярное выражение, которое захватит имена для вас. (Предоставленная скорость очень хорошо может быть проблемой.)
(?<=K{10}\s{2})\K[^\r\n]++(?!\s{2}-)
Пояснение:
(?<=K{10}\s{2}) #Positive lookbehind for KKKKKKKKKK then 2 return/newline characters
\K[^\r\n]++ #Greedily match 1 or more non-return/newline characters
(?!\s{2}-) #Negative lookahead for return/newline character then dash
Вот демоверсия Regex .
Вы заметите, что мой шаблон регулярных выражений немного меняется между демонстрацией регулярных выражений и демонстрацией PHP. Для соответствия символам возврата / перевода строки может потребоваться небольшая настройка в зависимости от среды.
Вот реализация php ( Demo ):
if(preg_match_all("/(?<=K{10}\s{2})\K[^\r\n]++(?!\s{2}-)/",$htmlContent,$matches)){
var_export($matches[0]);
}else{
echo "no matches";
}
Используя \K
в моем паттерне, я избегаю необходимости заключать в скобки. Это сокращает размер массива на 50% и является полезным приемом для многих проектов. \K
в основном гласит «начать совпадение полной строки с этой точки», поэтому совпадения идут в первом подрешетке (полные строки, ключ = 0) $matches
вместо генерации совпадения полной строки в 0
и захвата в 1
.
Вывод:
array (
0 => 'Laura Meyer',
1 => 'Venkat Talladivedula',
)