Regex 使用正则表达式将特定字符串与多个常量匹配
现在,我正在寻找的正则表达式有不同的要求,它太复杂了,我自己无法解决 我需要搜索具有以下要求的特定字符串:Regex 使用正则表达式将特定字符串与多个常量匹配,regex,Regex,现在,我正在寻找的正则表达式有不同的要求,它太复杂了,我自己无法解决 我需要搜索具有以下要求的特定字符串: 字符串以“fu:开头,以”结尾 在这些开始和结束要求之间,可以存在具有以下要求的任何其他字符串: 2.1。少于50个字符 2.2。仅小写 2.3。没有尾随空格 2.4。“符:”和另一个字符串之间没有空格 正则表达式的结果应该是“1”匹配但“2./2.1/2.2/2.3/2.4”不匹配的情况 目前我有以下正则表达式:“fu:([^”]*?[A-Z][^”]*?)”, 它查找以“fu:开头,以
“fu:([^”]*?[A-Z][^”]*?)”
,
它查找以“fu:
开头,以结尾的字符串,
,中间有任何大写字母,如下所示:
"fu:this String is wrong cause the s from string is upper case"
我希望这一切都是有意义的,我试着进入regex,但对于不是每天都使用regex的人来说,这个问题似乎很复杂
[编辑]
显然我不够清楚,我想要的是“错误”的比赛。
我在寻找这个正则表达式的补码:“fu:(?:[a-z][a-z]{0,47}[a-z]|[a-z]{0,2})”
一些例子:
比赛:“傅:这是一场比赛”
比赛:“傅:这是一场比赛”
比赛:“傅:这是一场比赛”
没有对手:“傅:这不是对手”
抱歉,这不容易解释:)试试这个:
"fu:(?:[a-z][a-z ]{0,47}[a-z]|[a-z]?)"
上述正则表达式应符合指定的要求。请尝试以下操作:
"fu:([a-z](?:[a-z ]{0,48}[a-z])?)"
这将匹配以“fu:
开头并以“
结尾的任何字符串,这些字符串之间的字符串将包含1-50个字符-仅小写,不能以空格开头,也不能有尾随空格
"fu: # begins with "fu:
( # group to match
[a-z] # starts with at least one character
(?: # non-matching sub-group
[a-z ]{0,48} # matches 0-48 a-z or space characters
[a-z] # sub-group must end with a character
)? # group is not required
)
" # ends with "
编辑:如果您也需要一个空字符串来匹配,即完整字符串为“fu:
,您可以在正则表达式中的匹配组末尾添加另一个?
:
"fu:([a-z](?:[a-z ]{0,48}[a-z])?)?"
我将两个正则表达式分开(一个允许字符串中包含1-50个字符,另一个允许字符串中包含0-50个字符),以显示细微的差异
编辑#2:要匹配上面的倒数,即-要查找与所需格式不匹配的所有字符串,可以使用:
^((?!"fu:([a-z](?:[a-z ]{0,48}[a-z])?)?").)*$
这将显式匹配与该模式不匹配的任何行。因此,这也将匹配不包含fu:-的行,如果这很重要的话
我能找出的唯一方法是明确尝试匹配失败的规则,以真正匹配上述相反的内容,并且仍然包括“fu:
和”
的锚:
"fu:([^a-z].*|[^"]{51,}|[a-z]([^"]*?[A-Z][^"]*?)+|[a-z ]{0,49}[ ])"
此正则表达式将匹配以非小写a-z
字符开头的任何字符串、长度超过50个字符的任何字符串、包含大写字母的任何字符串或具有尾随空格的任何字符串。对于每个附加规则,您都需要更新正则表达式以匹配所需的相反项
我的建议是,无论您使用何种语言,都要匹配所有符合您要求的输入字符串——如果没有匹配项,则该字符串必须违反您的规则。这可能就是您需要的
"fu:([a-z](?:[a-z ]{,48}[a-z])?)"
将A-Z替换为A-Z以获得小写字母。使用[a-z]{0,50)获得50个小写字符或空格。您允许标点符号吗?您使用的是什么语言?这是完整的PCRE正则表达式还是子集?不确定OP是否希望匹配
“fu:
,因为它满足所有条件。其余看起来不错。不,我的意思是另一个字符串的情况(正如OP定义的)是一个空字符串。我不确定OP是否希望它匹配这一个准确地给了我“正确”匹配。现在我“只是”需要这个正则表达式的补码。我基本上希望所有匹配都是错误的。例如,我想在这个字符串上有一个匹配:“fu:错误”,但在这个字符串上没有“fu:错误”“。如果我不清楚,很抱歉。字符串中允许有空格吗?上面的正则表达式不允许有空格。@Dave上面的正则表达式允许有空格;[a-z]
匹配字符a-z
或`。现在看起来不错。{0,2}”
有点多余,因为2号案例与前一个案例相匹配,但没有弄错。你是对的。这导致我找到了@newfurnity的解决方案:).+1对他来说!字符组将允许字符串中的数字。@nhahtdh正确。问题没有指定禁止数字。我不确定我是否理解OP的问题,但它似乎说只允许小写(和空格-从示例中)。
"fu:([a-z](?:[a-z ]{,48}[a-z])?)"