精华内容
下载资源
问答
  • 以下是一个json schema校验出入的json格式的例子。 { “KaTeX parse error: Expected 'EOF', got '#' at position 49: …draft-07/schema#̲", "id”: “http://example.com/teacher.schema.json”, “title”: ...

    json schema的基本概念这里就不多说了,有很多博客介绍地很详细,基本都是互相抄来抄去的东西。
    以下是一个json schema校验所需json格式的例子。
    以下是json schema的格式:

    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "$id": "http://example.com/teacher.schema.json",
      "title": "........",
      "description": ".......描述",
      "type": "object",
      "properties": {
        "channel_type": {
          "description": "......",
          "type": "string",
          "pattern": "^(hello|world|study|java)$"
        },
        "vehicle_type": {
          "description": "........",
          "type": "string",
          "pattern": "^(json|schema|is|convenient)$"
        },
        "is_need_support_camera": {
          "description": ".......",
          "type": "boolean"
        },
        "is_use_old_roadgate": {
          "description": ".......",
          "type": "boolean"
        },
        "is_need_remote_control_gate": {
          "description": ".........",
          "type": "boolean"
        },
        "is_unattended": {
          "description": ".........",
          "type": "boolean"
        }
      },
      "required": [
        "channel_type",
        "vehicle_type",
        "is_need_support_camera",
        "is_use_old_roadgate",
        "is_need_remote_control_gate",
        "is_unattended"
      ]
    }
    

    需要校验的json格式一个样例为:

    {
        "channel_type": "hello",
        "vehicle_type": "json",
        "is_need_support_camera":true,
        "is_use_old_roadgate":false,
        "is_need_remote_control_gate":true,
        "is_unattended":true
    }
    

    其中channel_typevehicle_type为string类型的字段,在这里又对他们的取值进行了限定,即channel_type只能取值为hello,world,stduy,java四个字符串中的任意一个。使用了正则表达式^(hello|world|study|java)$。进行限定。vehicle_type
    字段同理。
    Java 代码如下:

    import com.github.fge.jsonschema.main.JsonSchema;
    import com.github.fge.jackson.JsonLoader;
    import com.github.fge.jsonschema.core.report.ProcessingReport;
    import com.github.fge.jsonschema.main.JsonSchemaFactory;
    
    public boolean validateJasonSchema(String validateStr, String validateSchema) {
            if (org.apache.commons.lang.StringUtils.isEmpty(validateStr) || org.apache.commons.lang.StringUtils
                .isEmpty(validateSchema)) {
                return false;
            } else {
                try {
                    JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
                    JsonNode data = JsonLoader.fromString(validateStr);
                    JsonNode schema = JsonLoader.fromString(validateSchema);
                    JsonSchema jsonSchema = factory.getJsonSchema(schema);
                    ProcessingReport report = jsonSchema.validate(data);
                    return report.isSuccess();
                } catch (Exception e) {
                    logger.error("json schema 验证出错", e);
                }
            }
            return false;
        }
    

    在使用相关类之前需要先在pom.xml文件中导入相关依赖,如下:

     <dependency>
     	<groupId>com.github.java-json-tools</groupId>
        <artifactId>json-schema-validator</artifactId>
        <version>2.2.10</version>
    </dependency>
    
    展开全文
  • 详细介绍正则表达式的语法格式,通过实例进行讲解
  • 正则

    2017-04-28 14:24:48
    正则表达式: http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
    展开全文
  • 正则表达式

    2010-09-13 16:08:00
    参考:http://deerchao.net/tutorials/regex/regex.htm xml schema中用到正则表达式,下面是一简单的介绍

    参考:http://deerchao.net/tutorials/regex/regex.htm

     

    xml schema中用到正则表达式,下面是一简单的介绍

    表1.常用的元字符
    代码说明
    .匹配除换行符以外的任意字符
    /w匹配字母或数字或下划线或汉字
    /s匹配任意的空白符
    /d匹配数字
    /b匹配单词的开始或结束
    ^匹配字符串的开始
    $匹配字符串的结束

    表2.常用的限定符
    代码/语法说明
    *重复零次或更多次
    +重复一次或更多次
    ?重复零次或一次
    {n}重复n次
    {n,}重复n次或更多次
    {n,m}重复n到m次

    表3.常用的反义代码
    代码/语法说明
    /W匹配任意不是字母,数字,下划线,汉字的字符
    /S匹配任意不是空白符的字符
    /D匹配任意非数字的字符
    /B匹配不是单词开头或结束的位置
    [^x]匹配除了x以外的任意字符
    [^aeiou]匹配除了aeiou这几个字母以外的任意字符


    表4.常用分组语法
    分类代码/语法说明
    捕获(exp)匹配exp,并捕获文本到自动命名的组里
    (?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    (?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
    零宽断言(?=exp)匹配exp前面的位置
    (?<=exp)匹配exp后面的位置
    (?!exp)匹配后面跟的不是exp的位置
    (?<!exp)匹配前面不是exp的位置
    注释(?#comment)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读


    表5.懒惰限定符
    代码/语法说明
    *?重复任意次,但尽可能少重复
    +?重复1次或更多次,但尽可能少重复
    ??重复0次或1次,但尽可能少重复
    {n,m}?重复n到m次,但尽可能少重复
    {n,}?重复n次以上,但尽可能少重复


    表6.常用的处理选项
    名称说明
    IgnoreCase(忽略大小写)匹配时不区分大小写。
    Multiline(多行模式)更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配/n之前的位置以及字符串结束前的位置.)
    Singleline(单行模式)更改.的含义,使它与每一个字符匹配(包括换行符/n)。
    IgnorePatternWhitespace(忽略空白)忽略表达式中的非转义空白并启用由#标记的注释。
    ExplicitCapture(显式捕获)仅捕获已被显式命名的组。


    表7.尚未详细讨论的语法
    代码/语法说明
    /a报警字符(打印它的效果是电脑嘀一声)
    /b通常是单词分界位置,但如果在字符类里使用代表退格
    /t制表符,Tab
    /r回车
    /v竖向制表符
    /f换页符
    /n换行符
    /eEscape
    /0nnASCII代码中八进制代码为nn的字符
    /xnnASCII代码中十六进制代码为nn的字符
    /unnnnUnicode代码中十六进制代码为nnnn的字符
    /cNASCII控制字符。比如/cC代表Ctrl+C
    /A字符串开头(类似^,但不受处理多行选项的影响)
    /Z字符串结尾或行尾(不受处理多行选项的影响)
    /z字符串结尾(类似$,但不受处理多行选项的影响)
    /G当前搜索的开头
    /p{name}Unicode中命名为name的字符类,例如/p{IsGreek}
    (?>exp)贪婪子表达式
    (?<x>-<y>exp)平衡组
    (?im-nsx:exp)在子表达式exp中改变处理选项
    (?im-nsx)为表达式后面的部分改变处理选项
    (?(exp)yes|no)把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
    (?(exp)yes)同上,只是使用空表达式作为no
    (?(name)yes|no)如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
    (?(name)yes)同上,只是使用空表达式作为no

    展开全文
  • Python 正则表达式(匹配URL) ​ python的正则表达式是在re模块,属于内置模块。正则表达式格式的详细说明见文章结束表, 模式的构建通过PATTERN = re.compile(REGEX_STRING)构建,下面是python正则常用的函数。 ...

    Python正则表达式(匹配超链接URL)

    ​ python的正则表达式是在re模块,属于内置模块。正则表达式格式的详细说明见文章结束表, 模式的构建通过PATTERN = re.compile(REGEX_STRING)构建,下面是python正则常用的函数。

    Python函数
    函数用法说明
    PATTERN = re.compile(REGEX_STRING)正则模式构建
    match_ret = re.match(PATTERN, str)str是否符合某种模式,从str开始位置进行扫描
    match_ret = re.search(PATTERN, str)str是否包含某种模式的字符串,扫描整个字符串
    match_ret.group(idx)/match_ret.groups()符合模式的所有字符串匹配(tartget_str)
    上式match_ret无符合模式的匹配返回None,找到的符合模式的结果通过groups()取值
    match_ret.group(idx=0)取指定位置的字符串匹配
    match_ret.groups() 取所有字符串匹配
    re.findall(PATTERN/REGEX_STRING, str)返回所有符合模式的字符串列表 (ret_lst)
    1. URL格式匹配

    ​ 从给定的URL中获取IP(PORT),这个操作也可以通过python内置模块urllib的request.Request(url=_url)构建(type://host, type://origin_req_host)获取:

    import re
    
    URL_M3U8 = 'https://www.kkarm.com:65/20190818/zzElGIgO/index.m3u8'
    URL_ORIGIN = "https://www.cmcm5.com/play/5334.html?5334-6-1"
    '''
    	URL模式: http[s]://host:port/query
    	目标:    获取query前的base_url (schema://host:port)
    	正则构建:
    		方式1:字符串格式
    		方式2:突出特征 -> 以query前的/为分隔
    '''
    # https://后的host:port(由字母数字下划线, .点, :冒号组成, 遇到第一个/即终止匹配)
    HOST_PATTERN = re.compile(r"\w{4,5}://(\w|\.|:)+")
    # https://后的所有非/字符(遇到第一个/即终止)
    HOST_PATTERN2 = re.compile(r"(\w{4,5}://[^/]+)")
    host_match = re.match(HOST_PATTERN, URL_ORIGIN)
    host_match2 = re.match(HOST_PATTERN2, URL_M3U8)
    HOST = host_match and host_match.group()
    HOST2 = host_match2 and host_match.group()
    
    1. 从大量文本中提取指定格式的URL

    ​ re.findall()经常和python爬虫结合,将网络请求的文本内容进行提取(html/js),从中获取指定格式的内容,从中提取URL在钻入式的爬取其他链接内容。下面是部分格式化后的链接内容。

    目标字符串1(格式化)[1]

    %u7b2c2%u96c6$CNTY5MDI1Ng==#
    %u7b2c3%u96c6$CNTY5MDMwMA==#
    %u7b2c4%u96c6$CNTY5MDMwNA==$$$
    01$https://www.mgtv.com/b/159003/3363084.html#
    02$https://www.mgtv.com/b/159003/3363085.html#
    03$https://www.mgtv.com/b/159003/3364481.html#
    04$https://www.mgtv.com/b/159003/3364483.html#
    05$https://www.mgtv.com/b/159003/3366093.html$$$
    %u7b2c01%u96c6$https://www.kkarm.com:65/20190818/zzElGIgO/index.m3u8#
    %u7b2c02%u96c6$https://www.kkarm.com:65/20190818/U90bZ2CW/index.m3u8$$$
    %u7b2c1%u96c6$https://video.buycar5.cn/20201006/a15C23PF/index.m3u8#
    %u7b2c2%u96c6$https://video.buycar5.cn/20201006/UVsOhEq0/index.m3u8#
    %u7b2c3%u96c6$https://video.buycar5.cn/20201006/hzqZ3BgP/index.m3u8
    

    ​ 我们想要做的就是从中提取m3u8格式的URL(这是一种流式视频的文件格式,列出了所有视频片段的下载位置),下面是匹配思路:

    js_content = """
    %u7b2c2%u96c6$CNTY5MDI1Ng==#%u7b2c3%u96c6$CNTY5MDMwMA==#%u7b2c4%u96c6$CNTY5MDMwNA==$$$01$https://www.mgtv.com/b/159003/3363084.html#02$https://www.mgtv.com/b/159003/3363085.html#03$https://www.mgtv.com/b/159003/3364481.html#04$https://www.mgtv.com/b/159003/3364483.html#05$https://www.mgtv.com/b/159003/3366093.html$$$%u7b2c01%u96c6$https://www.kkarm.com:65/20190818/zzElGIgO/index.m3u8#%u7b2c02%u96c6$https://www.kkarm.com:65/20190818/U90bZ2CW/index.m3u8#$$$%u7b2c1%u96c6$https://video.buycar5.cn/20201006/a15C23PF/index.m3u8#%u7b2c2%u96c6$https://video.buycar5.cn/20201006/UVsOhEq0/index.m3u8#%u7b2c3%u96c6$https://video.buycar5.cn/20201006/hzqZ3BgP/index.m3u8
    """
    
    • 按照[1]中的格式进行匹配

      # 提取所有这个格式的内容
      PATTERN = r"%u\w+\$(.*?)#{1}|\${3}"
      # 提取以m3u8结尾的链接
      M3U8_PATTERN = PATTERN = r"%u\w+\$(.*?\.m3u8)#{1}|\${3}"
      m3u8_match0= re.findall(PATTERN, js_content)
      m3u8_match = re.findall(M3U8_PATTERN, js_content)
      

      (.*?)是re.findall()常用的匹配方式,()表示只提取括号中的内容,括号意外的作为格式匹配的一部分,比如从特定html内容里,提取需要的图片链接:

      img = re.findall('<div class="arc_body">\n<img src="(.*?)"', itext)[0]
      

      但是,这个提取的结果出现了偏差(m3u8结果)

      CNTY5MDI1Ng==#%u7b2c3%u96c6$CNTY5MDMwMA==#%u7b2c4%u96c6$CNTY5MDMwNA==$$$01$https://www.mgtv.com/b/159003/3363084.html#02$https://www.mgtv.com/b/159003/3363085.html#03$https://www.mgtv.com/b/159003/3364481.html#04$https://www.mgtv.com/b/159003/3364483.html#05$https://www.mgtv.com/b/159003/3366093.html$$$%u7b2c01%u96c6$https://www.kkarm.com:65/20190818/zzElGIgO/index.m3u8
      https://www.kkarm.com:65/20190818/U90bZ2CW/index.m3u8
      ''
      https://video.buycar5.cn/20201006/a15C23PF/index.m3u8
      https://video.buycar5.cn/20201006/UVsOhEq0/index.m3u8
      
    • 只提取m3u8结尾的URL格式

      文本[1]中,m3u8是一个链接格式,每个URL以“#”结尾,所有同类的URL以"$$$"结尾,URL都是以https开头,遇到#或者$一个URL结束。正则的匹配实质是找到恰如其分的分割符,找到目标字符串。

      M3U8_PATTERN = r"(https://[^#|$]*?\.m3u8)"
      m3u8_match = re.findall(M3U8_PATTERN, js_content)
      
    1. python与 js escape()/unecape

    ​ python 内置库urllib.parse提供了quote()/unquote()函数来达到js escape()/unescape()的效果。对于爬取的内容含有js编码过的字符串可以采用unquote函数进行解码:

    • 对中文进行解码

      js_content = js_content.replace('%u', '\\u').encode().decode('unicode_escape')
      
    • 还原js转码字符

      import urllib.parse
      js_content = urllib.parse.unquote(js_content)
      
    1. 正则表达式模式

    ​ 模式字符串使用特殊的语法来表示一个正则表达式,特殊字符代表本意,前面需要加上进行反斜杠\进行转义。

    表1 正则表达式模式(所有语言通用)

    模式描述
    ^匹配字符串的开头
    $匹配字符串的末尾。
    .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
    […]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
    [^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
    re*匹配0个或多个的表达式。
    re+匹配1个或多个的表达式。
    re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
    re{ n}精确匹配 n 个前面表达式。例如, o{2} 不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个 o。
    re{ n,}匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”。
    re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
    a| b匹配a或b
    (re)对正则表达式分组并记住匹配的文本
    \w匹配字母数字及下划线
    \W匹配非字母数字及下划线
    \s匹配任意空白字符,等价于 [ \t\n\r\f]
    \S匹配任意非空字符
    \d匹配任意数字,等价于 [0-9].
    \D匹配任意非数字
    \A匹配字符串开始
    \Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
    \z匹配字符串结束
    \G匹配最后匹配完成的位置。
    \b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
    \B匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
    \n, \t, 等.匹配一个换行符。匹配一个制表符。等
    \1…\9匹配第n个分组的内容。
    \10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。
    展开全文
  • Schema

    2015-08-12 10:23:02
    Schema XML Schema是基于XML的DTD替代者,用于描述XML文档的结构。XMLSchema支持命名空间,基本数据类型和复杂数据类型,比DTD更具优势。 1、 命名空间 一个XML文件可以包含多个XMLSchema文件,不同的schema文件...
  • XML Schema

    千次阅读 2015-01-16 09:06:28
    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XMLSchema 定义(XML Schema Definition,XSD)。 实例 George John Reminder Don't forget themeeting! ...
  • flume 自定义正则过滤器

    千次阅读 2017-01-08 01:14:07
    本文实现:flume 读取日志信息时,通过正则匹配过滤,将匹配到的结果存放在指定文件目录。本文结构: 1. 编写自定义过滤器 2. 编写flume配置文件 3. 运行测试日志信息过滤前:2017-01-06T11:32:48: Debug: D-UNK-...
  • 在使用动态表单时对表单项进行非空校验及正则校验。 使用手机号进行校验,示例如下: 动态表单的基本使用:https://ng-alain.com/form/getting-started/zh 基于基本示例,增加手机号必填与正则校验的例子: @...
  • 1.什么是正则表达式? 正则表达式(Regular Expression)是一种匹配文本中的字符序列的字符模式。 2.正则表达式用在哪些地方? 2.1查找重复的单词 \ Paris in the the spring. The theoretica
  • 我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表明以及字段名信息。故攻击方式如下: 1. 判断第一个表名的第一个字符是否是a-z中的字符,其中blind_sqli是假设已知的库名。 注:正则...
  • C#源码匹配常用正则表达式(摘录)

    万次阅读 2017-04-11 10:16:33
    C#源码匹配常用正则表达式
  • 常用正则表达式

    2013-07-05 20:46:17
    在用schema规范xml时,有些约束要用到正则表达式,我却写不出来。作为一个有节操的程序猿,这是难以忍受的。所以我这里总结下正则表达式。查阅的是08年的文档,步骤应该算是比较,但不知道是不是过时了,哪位大侠知道...
  • 一般推荐使用Json Schema(一种Json的数据结构定义)去校验。 对于JsonSchema,有很多种方式:可以自己一个个节点的写,可以使用生成工具,或者在线生成工具生成。 那么如何快速的根据Json内容 写出一个Json...
  • 理解XML Schema: XML Schema 初步

    千次阅读 2007-10-15 15:48:00
    本文章系列是XML Schema的一个从入门到进阶的基本教程。内容主要翻译整理了W3C关于XML Schema的入门级规范:XML Schema Part 0: Primer( http://www.w3.org/TR/xmlschema-0/),同时译者添加了一些个人的编注,并...
  • Python正则表达式详解

    千次阅读 多人点赞 2019-10-31 08:42:29
    目录一、re1.1 match1.2 search1.3 sub1.4 findall1.5 finditer1.6 split1.7 compile二、Pattern2.1 属性2.2 方法三、Match3.1 属性3.2 方法四、正则表达式4.1 常用4.2 边界空白4.3 分组4.4 前后匹配4.5 其他匹配4.6...
  • Schema约束

    千次阅读 2015-07-14 14:54:04
    验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema。本文主要介绍XML Schema。 一、XML Schema的优点 XML Schema基于XML,没有专门的语法。XML Schema可以像其他XML文件一样解析和处理。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,470
精华内容 10,188
关键字:

schema正则