Что не так в регулярном выражении?
Почему не работает регулярка?
Elapsed\sTime:\D+(.+?)<\/font>[\n]*.Last\sCalled\sNumber:\D+(\d{5,})@gw0<\/font>\D+(\d{5,})<\/font>
Elapsed Time:</td><td><font color="darkblue">16 days and 12:42:31</font><>
<>
<><>
<>
<>7gt757tLast Called Number:</td><td>
<font color="darkblue">67678799989@gw0</font>
</td><td>Last Caller Number:</td>
<td><font color="darkblue">876868856454</font>
Между </font> и Last Called Number: может быть любой текст и любое количество переносов строки (/n).
Ожидаемый результат:
16 days and 12:42:31
67678799989
876868856454
Ответы (1 шт):
Автор решения: Zombotron
→ Ссылка
Если реализовать через замену, что-то такое должно быть:
^.*?<font.*?>(.*?)<\/font>(.|\r|\n)*?<font.*?>(.*?)\@.*?<\/font>(.|\r|\n)*?<font.*?>(.*?)<\/font>$
в первых, третьих и пятых скобках нужные данные.
Псевдокодом так:
string txt = '
Elapsed Time:</td><td><font color="darkblue">16 days and 12:42:31</font><>
<>
<><>
<>
<>7gt757tLast Called Number:</td><td>
<font color="darkblue">67678799989@gw0</font>
</td><td>Last Caller Number:</td>
<td><font color="darkblue">876868856454</font>';
print regRepace(/^.*?<font.*?>(.*?)<\/font>(.|\r|\n)*?<font.*?>(.*?)\@.*?<\/font>(.|\r|\n)*?<font.*?>(.*?)<\/font>$/, \1\r\n\3\r\n\5);
