我正在尝试使用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);
但似乎不是这样。我在这做错了什么?是否有更简单的方法来完成此搜索?
答案 0 :(得分:0)
您可以尝试更简单的方法,例如搜索逗号后跟非法空格数?
赞,\s{2,}
如果您投入NOT验证,显然这会变得更复杂。对于那些人,您需要lookarounds:
,\s(?!\d)
== [逗号] [空白] [notfollowedbynumber]
(?<!\d),\s
== [notprecededbynumber] [逗号] [空白]
答案 1 :(得分:0)
使用,(?![ \r\n\"]|\d{3})