需要有关特定正则表达式的帮助

时间:2014-09-18 08:48:54

标签: regex xsd

我想用XSD文件验证xml文件的属性。此属性必须包含逗号分隔语言的列表,如下所示:

<Params languages="English,French,Spanish" /> // OK
<Params languages="French,Spanish" />  // OK
<Params languages="French" /> // OK
<Params languages="English,French,Spanish,French" /> // NOK (Two times French)
<Params languages="English,Spanish,French," /> // NOK (Comma at the end)

所以我尝试编写一个正则表达式模式来验证这一点。以下是约束条件:

  • 我必须至少有一种语言
  • 我不能在字符串的末尾加上逗号
  • 我的一种语言只能在字符串中出现一次
  • 编辑:我有一个重要的可能语言列表

最后两个限制是问题,我不知道该怎么做。

这是我现在得到的:

^[English,|French,|Spanish,...]+$ 

但它确实很差。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

以下正则表达式将满足您的所有要求,

^(English|French|Spanish)(?:,(?!\1)(English|French|Spanish))?(?:,(?!\1|\2)(English|French|Spanish))?$

DEMO

<强>更新

^(English|French|Spanish|German)(?:,(?!\1)(English|French|Spanish|German))?(?:,(‌​?!\1|\2)(English|French|Spanish|German))?(?:,(?!\1|\2|\3)(English|French|Spanish|‌​German))?$