一洼绿地

Flutter 正则匹配助手

·1 min read

Flutter 正则匹配助手

简介

| 可以方便的组织正则文件 | 从字符串源来提取想要的内容

regex file 1

<li class='swiper-slide'><img src='([^<"]+)'></li></ul>
.+?<div class="title">
\s+([^<"]+)\s*<div [^>]+>
.+?<span class="iconStar"></span>
\s+([^<"]+)\s+<span class="bar">|
.+?
: ([^<"]+)\s+<span class="bar">|
.+?<span class='viewCnt'>([^<"]+)</span>
.+?<div class="desc">([^<"]+)</div>
.+?<ul class="list_area" [^>]+>(.+?)</ul>

regex file 2

<li class="episodeBox doubleThumb" [^>]+>
.+?<a href="([^\"]+)">
.+?<span class=[\'|\"]thumb_1.+? data-src="([^\"]+)">
.+?<span class=[\'|\"]thumb_2.+? data-src="([^\"]+)">
.+?<div class='title'>([^<]+)
.+?<div class='pubDate'>([^<]+)

Util

class MatchUtil {

  static Iterable<RegExpMatch> matchAll(String regex, String? text) {
    if (text==null) {
      return [];
    }
    return RegExp(
      regex.replaceAll(RegExp(r"[\r\n|\n]"), ""), 
      multiLine:true
    )
    .allMatches(
      text.replaceAll(RegExp(r"[\r\n|\n]"), " ")
    );
  }

  static RegExpMatch? match(String regex, String? text) {
    text ??= "";
    return RegExp(
      regex.replaceAll(RegExp(r"[\r\n|\n]"), ""), 
      multiLine:true
    )
    .firstMatch(
      text.replaceAll(RegExp(r"[\r\n|\n]"), " ")
    );
  }
}