正则表达式与if条件

use*_*634 7 regex

我是正则表达的新手.我正在尝试构造一个正则表达式,前三个字符必须是字母表,然后字符串的其余部分可以是任何字符.如果前三个字符后的字符串部分包含&然后此部分应以"开头和结尾"结尾.

我能够构造^ [az] {3},但坚持条件语句.

这可以在一个表达式中完成吗?

Wik*_*żew 12

在大多数正则表达式中,您可以使用简单的前瞻来确保某些文本存在或不在当前位置右侧的某个位置,并且使用交替运算符|可以检查备选方案.

所以,我们基本上有两种选择:&在前三个字母表之后的字符串中有一个地方,或者没有.因此,我们可以使用

^[A-Za-z]{3}(?:(?=.*&)".*"|(?!.*&).*)$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节:

  • ^ - 字符串的开头
  • [A-Za-z]{3} - 3个字母
  • (?:(?=.*&)".*"|(?!.*&).*) - 两种选择中的任何一种:
    • (?=.*&)".*"- 如果&string((?=.*&))匹配中有某个地方",那么任何0+字符,然后"
    • | - 要么
    • (?!.*&).*- 如果字符串中没有&((?!.*&)),只需匹配任何0+字符到...
  • $ - 字符串结尾.

在PCRE,或.NET或其他一些正则表达式中,您可以访问条件构造.这是一个PCRE演示:

^[A-Za-z]{3}(?(?=.*&)".*"|.*)$
            ^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

(?(?=.*&)".*"|.*)方式:

  • (?(?=.*&)- 如果有&任何0+字符之后......
  • ".*"- "anything here"类似匹配的字符串
  • | - 或者,如果没有 &
  • .* - 匹配当前位置的任何0+字符(即在前3个字母后).