Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 不允许空字符串的XML架构限制模式_Regex_Xsd - Fatal编程技术网

Regex 不允许空字符串的XML架构限制模式

Regex 不允许空字符串的XML架构限制模式,regex,xsd,Regex,Xsd,在我的XML模式中,我有字符串类型的元素,我不希望它是空的(如果它包含空格等,我也认为它是空的) 我申请了我在 该模式究竟做了什么,并将实现我的期望?该模式: 零个或多个字符*(匹配任何字符) 匹配不在列出的字符集中的内容\s是空白,因此[^\s]是“匹配非空白的内容。匹配中的首字母^否定正常匹配这些字符中的任何一个 零个或多个字符 查看帖子“不允许空字符串的模式”的主题,该主题仍然没有得到回答。您可以使用标记来禁止空格 空白约束设置为“折叠”,它将执行以下操作 删除所有空白字符,包括换行

在我的XML模式中,我有字符串类型的元素,我不希望它是空的(如果它包含空格等,我也认为它是空的)

我申请了我在


该模式究竟做了什么,并将实现我的期望?

该模式:

  • 零个或多个字符
    *
    匹配任何字符)
  • 匹配不在列出的字符集中的内容
    \s
    是空白,因此
    [^\s]
    是“匹配非空白的内容。匹配中的首字母
    ^
    否定正常匹配这些字符中的任何一个
  • 零个或多个字符

查看帖子“不允许空字符串的模式”的主题,该主题仍然没有得到回答。您可以使用
标记来禁止空格

空白
约束设置为“折叠”,它将执行以下操作

  • 删除所有空白字符,包括换行符、制表符、, 空格、回车
  • 删除前导空格和尾随空格
  • 将多个空间缩减为单个空间

  • 参考资料:

    我不知道是否仍然有用,但我发现了一个比第一篇文章更好的模式。这里是:

    <xs:simpleType name="nonEmptyString">
        <xs:restriction base="xs:string">
            <xs:pattern value="(\s*[^\s]\s*)+"></xs:pattern>
        </xs:restriction>
    </xs:simpleType>
    
    
    

    使用Eclipse似乎很好。

    这不正是您想要的吗

     <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
     </xs:restriction>
    
    
    
    如果字符串只包含空格(换行符、回车符、制表符、前导空格和尾随空格),处理器将删除它们,因此验证将失败;如果还有其他内容,验证将成功。
    (注意:两个或两个以上空格的内部序列将被删除-请确保您没有问题)

    它拒绝带有回车字符的文本。为什么?@jlp:“
    匹配任何字符“是快速版本。完整版本包括一个注意事项,根据正则表达式引擎的不同,默认情况下可能不匹配换行符。尝试将
    *
    替换为
    [。\s]*
    ,因为
    \s
    匹配项同时包括换行符和回车符。您能写出符合问题要求的模式吗?@jlp:什么要求?问题是“这个模式意味着什么?”。字符串不是空的(只有空格和换行符意味着也是空的)您对“collapse”值的描述似乎不正确;尤其是1号。数字1中唯一正确的部分是数字2中重复的部分。但是考虑到你的资料来源(w3schools),我可以理解为什么你可能会感到困惑;W3Schools在很多方面都是一个相当低质量的来源。(见)@Andrew谢谢你的指点。我还引用了W3C作为参考,W3C空白点2,3似乎是完全正确的。虽然没有提到第1点,但它也在工作中更新了参考资料,对参考资料进行了极好的更新。我仍然有点不确定#1(#2,3绝对正确,正如你所注意到的)。在#1上,它不是将这些类型的空白转换为空格,而不是简单地删除它们吗?(然后,随后,将所有空间压缩为单个空间…)我刚刚编写了5个单元测试,测试a)空字符串b)单个空间c)d)包含新行的多个空间e)包含多个新行的多个空间。它适用于所有这些情况,因此我建议这是一个很好的解决方案,适用于任何需要它的人!:)做得好。这是所有对我的用例+1有效的答案中唯一的解决方案。这一个非常有效,与线程海报示例相比的区别在于,它使用了\s*而不是。*。不符合新线!它是有效的,但它之所以有效,仅仅是因为它使用了:限制。所以没有其他的魔法存在。
     <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
     </xs:restriction>