php正则表达式找到一个不具有一定长度的字符串

时间:2013-12-06 06:06:07

标签: php regex

我正在尝试使用preg_match_all来检查逗号的语法错误,其中“hello,there”可以,但不是“hello,there”。

首先我意识到逗号之后可以接受空格,双引号和换行符,所以我相信我能做到 preg_match_all("/(,[^ \r\n\"])/", $mystring, $result); 任何返回都意味着语法错误。

然后我意识到逗号也出现在数字中,例如。 1,234,567,所以我需要在我的正则表达式中允许3位数字。如果我纯粹在寻找一个3位数字,我知道我能做到     preg_match_all("/(\d{3})/", $mystring, $result);

但在这种情况下,我想排除 3位数字,即。正则表达式应该说“匹配所有有逗号后跟不是空格,不换行,不是3位数”。 “而不是一个3位数字”部分让我失望;我以为我可以做到     preg_match_all("/(,[^ \r\n\"\d{3}])/", $mystring, $result);但似乎不是这样。我在这做错了什么?是否有更简单的方法来完成此搜索?

2 个答案:

答案 0 :(得分:0)

您可以尝试更简单的方法,例如搜索逗号后跟非法空格数?

,\s{2,}

如果您投入NOT验证,显然这会变得更复杂。对于那些人,您需要lookarounds

,\s(?!\d) == [逗号] [空白] [notfollowedbynumber] (?<!\d),\s == [notprecededbynumber] [逗号] [空白]

答案 1 :(得分:0)

使用,(?![ \r\n\"]|\d{3})

的否定前瞻