REGEX - 字符串不能从这些单词开始,并且可能包含字母数字字符

时间:2017-03-13 04:15:10

标签: php regex preg-match regex-lookarounds

要求如下:

1.First three characters must not be "CP ","C P". Note there is a space in both these words
2.First character may be alphanumeric, including À, Â, Ç, È
3.2nd and 3rd caracter can be any ascii character other than (0-31)

我遇到问题的部分是如何在字符串不以" CP"开头的地方写正则表达式?单词或" C P"那个词。请注意,ASCII 32是空格字符,在正则表达式匹配中有效但不能与" CP"结合使用。

我尝试过像这样的起点,但无济于事

(?!CP )[^\x00-\x1F]

示例字符串

无效文字:CP 420,C P 420

有效文字:abc 420,420 CP等。

2 个答案:

答案 0 :(得分:1)

您需要一个起始锚点,您需要将可选空白添加到负前瞻中。列出您想要的字符比列出您不想要的字符更容易,因为它是2个不同的范围。尝试:

^(?!(?:C ?P|CP ?))[A-Za-z\dÀÂÇÈ][\x20-\xFF]{1,2}

演示:https://regex101.com/r/4Rhv2V/2/

答案 1 :(得分:0)

我尝试了一些REGEX表达式,并且达到了这个目的。

__new__

这将产生以下结果

^((?!cp )(?!c p))(.)*$

不确定这是否是您需要的。如果没有,请提供更多示例,我会深入挖掘。

修改1 : 根据精炼的要求,尝试这是否有效。

acp  -> Matched
cpa  -> Matched
fsdgsfdgsfd  -> Matched
c psadsadsadsa  -> Not Matched
cpasdsa  -> Matched
ac pasdsadsa  -> Matched
cp sadfsdfsdf  -> Not Matched
Ècp sadfsdfsdf  -> Matched