PHP Regex查找字符串是否以逗号和分号格式化

时间:2015-08-11 20:20:31

标签: php regex string

我需要找到一个字符串是否按以下方式格式化:

text1,x%;text2,y%

因此,这些字符串必须有效:

example, 10%; test, 22%; another, 90%

another example, 11.5%; yet other example, 91%

another, 11%; other example, 11.2%

example2, 20%

以下内容必须无效:

example3; 10%, test3, 22%; another3, 90%

example4; 20%

example5, 11%; test 5, 123%

another fail example, 11,5%; yet other example, 91%

我知道一些正则表达式但这个验证我甚至不知道如何开始。

编辑:添加了更多示例。

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

^[\w\s]+,\s*\d+(?:\.\d+)?%(?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)*$

请参阅demo

正则表达式解释:

基本上,它由2部分组成,;之前的部分和其他可选序列。

  • ^ - 字符串的开头
  • [\w\s]+ - 一个或多个字母数字或空白字符,后跟......
  • , - 逗号,然后
  • \s* - 可选空白
  • \d+(?:\.\d+)?% - 浮点数或整数(小数部分因?而可选)和百分号
  • (?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)* - 匹配0或更多序列的第二部分......
    • ;\s* - 一个分号后跟可选的空格
    • [\p{L}\s]+ - 一个或多个字母(\p{L})或空格
    • ,\s* - 逗号后跟可选空格
    • \d+(?:\.\d+)?% - 浮点数或整数(小数部分是可选的)和百分号
  • $ - 字符串结尾