php: удаление определенного символа Â после обнаружения строки с пробелом/пробелом впереди с использованием регулярного выражения

В настоящее время я пробую поисковый робот и столкнулся с этой проблемой с регулярным выражением.

Символы, которые я хочу сохранить из приведенной ниже строки, - «09:00»:

<td style="border: #080707 1px solid;" lang="lang" valign="top" scope="scope"> 09:00 AM</td>

И ниже моя часть регулярного выражения:

preg_match_all ('/<td .+ scope="scope">(.*)<\/td>/i',$link_string,$details);

Полученный результат: 09:00, я не хочу Â. я знаю, что это вызвано пробелами, но я пробовал несколько разных способов, например:

    preg_match_all ('/<td .+ scope="scope">\s(.*)<\/td>/i',$link_string,$details);

    preg_match_all ('/<td .+ scope="scope">(\w+)<\/td>/i',$link_string,$details);

    preg_match_all ('/<td .+ scope="scope"> (.*)<\/td>/i',$link_string,$details);

Однако возврат является ложным, и символы, которые я хочу, не совпадают.

Надеюсь получить некоторое представление о том, как лучше всего делать такое регулярное выражение.


person kenny.g    schedule 25.04.2013    source источник
comment
кажется, пробел таков, я просто включаю дополнительный метасимвол, чтобы соответствовать ему, как показано ниже: preg_match_all ('/‹td .+ scope=scope›()?(\w+.*)‹\/td›/iu',$ link_string,$детали);   -  person kenny.g    schedule 25.04.2013


Ответы (2)


если вы не можете trim() пометить td самостоятельно, то почему бы не использовать substr() для вывода, чтобы обрезать первый символ:

$time = substr($details[0][1],1) //[0][1] to be changed to actual output

person Samuel Cook    schedule 25.04.2013

Вы должны просто добавить модификатор u. С этим флагом механизм регулярных выражений будет обрабатывать вашу строку как строку Unicode. Пример:

preg_match_all ('/<td .+ scope="scope">(.*)<\/td>/iu',$link_string,$details);
person Casimir et Hippolyte    schedule 25.04.2013
comment
спасибо за предложение, я не знал об этом флаге /u - person kenny.g; 25.04.2013