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 特定正则表达式的帮助:需要在单个字符串中匹配多种格式的多个实例_Regex - Fatal编程技术网

Regex 特定正则表达式的帮助:需要在单个字符串中匹配多种格式的多个实例

Regex 特定正则表达式的帮助:需要在单个字符串中匹配多种格式的多个实例,regex,Regex,我为这个糟糕的标题道歉……很难用一句话概括整个情况 首先,我要说,我这么问是因为我不是正则表达式专家。我在这里和那里都使用过它,但我只是想出了一个正确的方法来满足以下要求 我试图编写的正则表达式用于XML模式中的输入验证,也用于Javascript中的其他地方 支持两种不同的可能格式。有一个文字字符串(必须用引号括起来)和一个十六进制值字符串(必须用大括号括起来) 一些测试用例: “这是一个文本字符串”可能与 (?:(?:"[^,]+?"|\{(?:[0-9]|[a-f]|[A-F]| )+?\

我为这个糟糕的标题道歉……很难用一句话概括整个情况

首先,我要说,我这么问是因为我不是正则表达式专家。我在这里和那里都使用过它,但我只是想出了一个正确的方法来满足以下要求

我试图编写的正则表达式用于XML模式中的输入验证,也用于Javascript中的其他地方

支持两种不同的可能格式。有一个文字字符串(必须用引号括起来)和一个十六进制值字符串(必须用大括号括起来)

一些测试用例:


“这是一个文本字符串”
可能与

(?:(?:"[^,]+?"|\{(?:[0-9]|[a-f]|[A-F]| )+?\}),)*(?:(?:"[^,]+?"|\{(?:[0-9]|[a-f]|[A-F]| )+?\}))

也许是类似于

(?:(?:"[^,]+?"|\{(?:[0-9]|[a-f]|[A-F]| )+?\}),)*(?:(?:"[^,]+?"|\{(?:[0-9]|[a-f]|[A-F]| )+?\}))
根据regex的说法,XSD中使用的语言不如Java中使用的语言表达能力强,但对于您的任务来说表达能力足够了

现在进行构造,使用您自己的正则表达式。将点替换为否定字符类
[^,]
,以匹配除逗号以外的所有字符,并(为了更清晰)将十六进制字符类合并为一个。您将获得以下正则表达式:

"[^,]+"|\{[0-9a-fA-F ]+\}
如果我们将此正则表达式命名为
(用于“单个字符串”),则附加功能将由匹配任意数量的
的正则表达式验证,后跟单个

根据regex的说法,XSD中使用的语言不如Java中使用的语言表达能力强,但对于您的任务来说表达能力足够了

现在进行构造,使用您自己的正则表达式。将点替换为否定字符类
[^,]
,以匹配除逗号以外的所有字符,并(为了更清晰)将十六进制字符类合并为一个。您将获得以下正则表达式:

"[^,]+"|\{[0-9a-fA-F ]+\}
如果我们将此正则表达式命名为
(用于“单个字符串”),则附加功能将由匹配任意数量的
的正则表达式验证,后跟单个


这是一个有效的Java解决方案,但是XSD的正则表达式语言不允许某些语法元素(不情愿的量词和非捕获组)。请看Upvoted,感谢您的努力,也感谢有效的解决方案(无论如何,我相信Christian会这么做)。谢谢你的帮助!这是一个有效的Java解决方案,但是XSD的正则表达式语言不允许某些语法元素(不情愿的量词和非捕获组)。请看Upvoted,感谢您的努力,也感谢有效的解决方案(无论如何,我相信Christian会这么做)。谢谢你的帮助!谢谢你,克里斯蒂安,这正是我想要的。解释它似乎比我意识到的更容易……我想这就是懂一门语言和努力学习以使它正确的区别。当你这样做的时候,它看起来容易多了,而且解释也很有道理。非常感谢。谢谢你,克里斯蒂安,这正是我想要的。解释它似乎比我意识到的更容易……我想这就是懂一门语言和努力学习以使它正确的区别。当你这样做的时候,它看起来容易多了,而且解释也很有道理。非常感谢。