Regex / PHP检查字符组是否仅出现一次
|
我正在尝试使用REGEX验证PHP中的输入。我想检查输入中是否包含“ 0”字符组,并且该输入仅出现一次。否则,规则将失败。
这是我尝试过的:
preg_match(\'|^[0-9a-zA-Z_-\\s:;,\\.\\?!\\(\\)\\p{L}(%s){1}]*$|u\', $value);
(除此之外,还有其他一些规则;我已经尝试过(%s){1}
部分,但它不起作用)。
我相信这是一个非常简单的解决方案,但是我真的不喜欢REGEX的...谢谢您的帮助!
没有找到相关结果
已邀请:
5 个回复
藐刚
我将解释每个部分的工作原理
是零宽度的断言-
是正向预言-(表示它必须匹配,但不能“吃掉”任何字符)。这意味着整行只能有1
。
regex的其余部分还将查看整个字符串,并确保整个字符串仅由字符类中的字符组成(如您的原始regex)。
肉脓措伪
烫珊
并检查匹配数。如果为1,则表示一切正常,例如:
长拳
方括号内的
序列可能并没有您认为的那样,但是没关系,解决方案更加复杂。实际上,
绝不应出现在正则表达式中的任何位置。正如许多人所假设的那样,它并不能确保只有一种东西。事实上,它什么也没做。它是纯粹的混乱。 编辑(对评论的回答):为确保字符串中仅存在特定序列中的一个,您必须积极检查每个单个字符,将其分类为-0的一部分或不是-0的一部分。为此,在否定超前确认该字符不是“ 0”的开始之后,“ 15”一次消耗一个字符。 当lookahead表达式的该部分退出匹配时,字符串中的下一个内容必须为“ 0”。然后第二个
插入以确认直到字符串末尾不再有
序列。 并且不要忘记,必须将前瞻表达式放在两端。因为前瞻是主正则表达式开始锚之后的第一件事,所以您无需添加其他“ 20”。但是先行必须以自己的ѭ21锚结束。
抵舵
会告诉您字符串是否匹配。第二个电话会告诉您它是否出现多次。 这将使您更容易阅读和维护。