排除正则表达式中的某些字符

时间:2015-09-09 09:40:10

标签: php regex

我有以下正则表达式,我很难排除某些字符。我想从字符串中排除£%&+¬¦éúíóáÉÚÍÓÁ

\S*(?=\S{7,30})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*

我试过以下没有运气:

/\S*(?=\S{7,30})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=[^£%&+¬¦éúíóáÉÚÍÓÁ])\S*/

任何建议或指示都会很棒,谢谢。

2 个答案:

答案 0 :(得分:1)

您必须尝试匹配没有指定字母的字符串。你需要锚定你的前瞻,只有这样才能达到你所需要的水平。

^(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}$
 ^^^^^^^^^^^^^^^^^^^^^^^^

请参阅demo

所有前瞻检查开头的字符串,长度检查可以移动到结尾。您需要^$两个锚来启用长度检查。

如果您在较大字符串中匹配,则can replace ^ and $ with word boundary \b

\b(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}\b

或外观(如果这些不是单词,而是一些符号序列):

(?<!\S)(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}(?!\S)

请参阅another demo

答案 1 :(得分:1)

您的正则表达式匹配这些字符,因为\S匹配除空白之外的任何字符。您只需要排除这些字符。

  • [^\s£%&+¬¦éúíóáÉÚÍÓÁ]negated character class。它匹配任何字符,除了空格或您不想要的字符。

只需替换模式中\S的每个出现位置:

[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]{7,30})(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[a-z])(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[A-Z])(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[\d])[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*

现在,我不确定你用这种模式尝试实现的目标。也许你可以详细说明你想要匹配的内容,以便稍微改进一下。