正则表达式帮助

问题描述:

我想在php中编写一个正则表达式来检查以确保传递的字符串是三件事情之一,但是我很难(我真的与正则表达式斗争)。正则表达式帮助

我需要确保我收到的参数包含的这三样东西之一,而不是其他:

  1. “|”这就是它只是一个单一的管道或
  2. “”这就是它只是一个空字符串或
  3. “| 1 | 534 | 3453 | 23 | 213 | 2 |”使用管道作为分隔符为一系列数字

谢谢你的帮助的长字符串(这是不断地给我出了问题,觉得我需要在正则表达式专门买了一本书)

+1

我可以建议[掌握正则表达式](http://oreilly.com/catalog/9780596528126)(也就是猫头鹰书) – 2011-01-28 19:18:19

+1

有两件事可以帮助你阅读正则表达式。本教程:http://www.regular-expressions.info/tutorial.html和这个动作网站来尝试你的正则表达式:http://gskinner.com/RegExr/ – 2011-01-28 19:27:50

preg_match('/^(?:\|(?:\d+\|)*)?$/', $input); 
+0

字符的性格,与我的答案完全一样。太慢了。 – sdleihssirhc 2011-01-28 19:20:01

要做到这一点是将其分割成三个独立的检查,最简单的方法:

  1. 的字符串就是一个单管(strcmp($str,"|") == 0
  2. 字符串为空(strlen($str) == 0)。
  3. 的字符串匹配的正则表达式/^[0-9\|]+$/

不要使它比更难它需要通过尝试所有这些支票塞进一个正则表达式。你的代码会更容易被理解,你的代码的未来维护者会感谢你。

编辑:只是为了显示我在说一下,这里的一些示例代码:

if(strcmp($str,"|") == 0 || 
    strlen($str) == 0  || 
    preg_match('^[0-9\|]+$', $str) { 
    ... 
} 

VS

if(preg_match('/^(?:\|(?:\d+\|)*)?$/', $str) { 
    ... 
} 

一目了然,其中一个执行...如果$str是空?

(^(\ |)([0-9 \ |] {0,})(\ |)$)|(^(\ |)$)|()

使用上述正则表达式,并且如果没有mathches你的字符串是无效的,othervise其有效,并尝试检查空str_len($ string)> 0然后检查正则表达式