Regex xsd文件中的html正则表达式验证
我编写了正则表达式来验证xml模式的url(它必须需要http):Regex xsd文件中的html正则表达式验证,regex,xsd,Regex,Xsd,我编写了正则表达式来验证xml模式的url(它必须需要http): ^[https?]+://([^/:]+\.[a-z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?(\/.*)?$ 我现在正试图避免所有的限制。我想到了这个: [https?]+://([^/:]+\.[a-z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?[^>](\/.*) 但是仍然得到了关于无效正则表达式的XmlSchema
^[https?]+://([^/:]+\.[a-z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?(\/.*)?$
我现在正试图避免所有的限制。我想到了这个:
[https?]+://([^/:]+\.[a-z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?[^>](\/.*)
但是仍然得到了关于无效正则表达式的XmlSchemaPasserError。你能帮我解决这个问题吗?删除
^
和$
锚定是正确的一步,因为它意味着匹配整个字符串输入,^
和$
不像大多数(如果不是所有的话)其他正则表达式那样被视为字符串元字符的开始/结束
匹配一个或多个h
、t
、p
、s
或?
字符的+
必须转换为https?
字符以匹配http
,这是可选的s
您不需要转义/
,而是将\/
转换为/
此外,末尾的/.*
应该是可选的,添加?
量词
使用
一些用法:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="ElementNameHere">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?(/.*)? "/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
您所说的“避免……的所有限制”是什么意思?注意:首先,我不认为[https?]+
做了您认为的事情:它允许[]
之间的任何字符以1到任意次数的顺序出现。您可能想要https?
(按照严格的顺序,可以选择“s”)而不是[https?]+
,[https?]+
必须将https?
转换为https?
,您不需要转义/
。此外,结尾的/.*
可能是可选的。试试https?:/([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}){3}[0-9]{1,3})(:[0-9]+)(/.*)@WiktorStribiż它能工作吗,好的。多谢各位。如果你把你的评论改成答案,我会接受:)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="ElementNameHere">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="https?://([^/:]+\.[a-zA-Z]{2,10}|([0-9]{1,3}\.){3}[0-9]{1,3})(:[0-9]+)?(/.*)? "/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>