2012-04-19 2 views
0

Я хочу извлечь строку между двумя другими строками. Строки находятся в тегах HTML, но я хотел бы избежать разговора о том, должен ли я анализировать HTML с регулярным выражением (я знаю, что не должен и решил проблему с stristr(), но хотел бы знать, как это сделать . с регулярными выражениямиКак я могу сопоставить строку между двумя другими известными строками и ничего больше с REGEX?

строка может выглядеть следующим образом:

...uld select &#8220;Apply&#8221; below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA

Я заинтересован в <b>Primary Location</b>: United States-Washington-Seattle<br/> и хочу извлечь «США-Вашингтон в Сиэтле»

Я попытался '(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)', который работал в RegExr, но не PHP:

preg_match("/(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)/", $description,$matches);

ответ

1

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

preg_match("/(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)/", $description,$matches); 

в

preg_match("/(?<=<b>Primary Location<\/b>:)(.*?)(?=<br\/>)/", $description,$matches); 

или это

preg_match("~(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)~", $description,$matches); 

Update

Я просто проверял на www.writecodeonline.com/php и

$description = "uld select “Apply” below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA"; 
preg_match("~(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)~", $description, $matches); 

print_r($matches); 

работает. Выход:

Array ([0] => США-Вашингтон в Сиэтле [1] => США-Вашингтон-Сиэтл)

Вы также можете избавиться от группы захвата и сделать

$description = "uld select “Apply” below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA"; 
preg_match("~(?<=<b>Primary Location</b>:).*?(?=<br/>)~", $description, $matches); 

print($matches[0]); 

Выход

Соединенные Штаты Америки, Вашингтон-Сит tle

+0

Спасибо. Это хороший момент и позволит избежать ошибки, но все равно ничего не соответствует. – codecowboy

+0

Я тестировал его и работал на меня. Я обновил свой ответ. – stema

+0

Спасибо. Это не работает на местном уровне - возможно, по какой-то другой причине, поэтому я согласен с ответом. – codecowboy

Смежные вопросы