结合表达式

时间:2017-10-14 07:03:55

标签: regex

如何组合两个或更多个正则表达式,以便仅在两个表达式都为真时才发生匹配。 例如,我想在单词边界内识别包含6位数字(不以5开头)的文本,即

\b[0-46-9]\d{5}\b

但我想要排除包含000000

的文字
^(?!.*000000).*$

abc234576c Match
abc534756c No Match
abc000000c No Match

我该怎么做?

2 个答案:

答案 0 :(得分:0)

试试这个正则表达式模式:

\b(?!.*000000)[^0-9]*[0-46-9]\d{5}[^0-9]*\b

这假设您希望匹配一个六位数字,可能与之前和之前的非数字匹配。它还确保该号码不是000000且该号码不以5开头。

Demo

答案 1 :(得分:0)

你的第一个正则表达式错过了一个重点,\ b是识别单词字符(包括数字)和非单词字符之间的对比。
当需要整个文本时,这应该有效:

$this->validate($request, [ '*.item_id' => 'required|integer', '*.item_no' => 'required|integer', '*.size' => 'required|max:191', ]);

将它与正确的第二个表达式相结合,你会得到:

[a-zA-Z]*[0-46-9]\d{5}[a-zA-Z]*

您可以查看结果here