Помощь по regex (Регулярные выражения)
Помогите собрать шаблон regex для следующих строк:
<a class='text-primary' href='/token/0xae8488e75493b89a0e1488bf91542208c416f486'>BUZcoin (BUZ)</a>
<a class='text-primary' href='/token/0x13601888f649c96383812ec45c608b4e7da5e899'>Bablos Token (BABLOS)</a>
<a class="text-primary" href="/token/0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5">Decentralized Putin (PUTIN)</a>
на выходе должно остаться:
0xae8488e75493b89a0e1488bf91542208c416f486, BUZcoin, BUZ
0x13601888f649c96383812ec45c608b4e7da5e899, Bablos Token, BABLOS
0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5, Decentralized Putin, PUTIN
сам пробовал, типа "токен(.*)а" - первый раз вырезает нормально, затем прихватывает весь текст до последнего тега а.
не проверял
Спасибо, вот так выглядят оба варианта, если пропустить образец из моего первого поста:
но сожалению оба случая не работают как надо, если запустить с оригинальным сайтом. С большим текстом первый вариант начинает с tokens" и захватывает почти весь текст страницы заканчивает на а,
второй вариант начинает с //availableAd захватывает весь текст и заканчивает на src="/
а ещё я заметил в моём образце ошибки, во-первых путин там две точечки, а надо все с одной точечкой и текст не в три строки, а сплошняком как на оригинальной странице, поэтому новый образец:
blablabla <a class='text-primary' href='/token/0xae8488e75493b89a0e1488bf91542208c416f486'>BUZcoin (BUZ)</a> blablabla blablabla <a class='text-primary' href='/token/0x13601888f649c96383812ec45c608b4e7da5e899'>Bablos Token (BABLOS)</a> blablabla blablabla <a class='text-primary' href='/token/0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5'>Decentralized Putin (PUTIN)</a> blablabla
проверять можно онлайн на regex101.com - https://regex101.com/r/9wNbfv/1
И почему регекс захватывает весь текст после первого совпадения? например мой другой регекс: собирает все майлы со страниц и складывает столбиком без проблем:
(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)
регексы по умолчанию прожорливые (greedy), поэтому знак вопроса. исправьте во втором примере на ?=</a
я вам просто напишу, что вы хотите извлечь, и вы сами напишете прелестное выражение.
вам нужно выбрать все между
началостроки<a class='text-primary' href='/token/
и
</a>конецстроки
если я правильно понял, то это - примитифф. если неправильно, поясните в чем.
Regex replace
(.+)(0x\w*)([^\w]+)([\w ]+)([^\w]+)([\w ]+)(.+)
$2, $4, $6
результат
0xae8488e75493b89a0e1488bf91542208c416f486, BUZcoin , BUZ
0x13601888f649c96383812ec45c608b4e7da5e899, Bablos Token , BABLOS
0x3ea9a57780a5deb7c09c623165ca22d7afc0a9e5, Decentralized Putin , PUTIN
Спасибо. Отвечу всем одним постом.
/<a.+?href='\/token\/(\w+)'>([\w\s]+) \((\w+)\)/g
К сожалению, моя программа не поддерживает флаг /g для глобального поиска, а объединить 3 группы я не смог. Спасибо.
если я правильно понял, то это - примитифф. если неправильно, поясните в чем.
Вы правильно поняли, я раньше шаблонами регекс пользовался, но сам их не составлял, моя проблема была ограничить выборку спереди и сзади.
С помощью от schizo (третий пост) + мои исправления, актуальная рабочая версия: (?<=' href='/token/).+?(?=</a)
На выходе получаю, почти то что хотел, проблема была решена через пару часов после постановки вопроса на форуме, всем спасибо.
Кстати, у регекс много диалектов, для перл одно для руби и с итд другое, на одной машине может работать на другой нет.