Regex Match if present 不匹配一行

Regex Match if present does not match a line

我有一组字符串作为:

如果 Site*** 出现在开头,P*** 出现在结尾,我想将它匹配成 3 列 否则全部匹配

我正在努力

^(.*)??(Site\S\s\d+\S\d+)?(.*)?\s(P.*?)$

但是不见了

我该怎么做?

正则表达式:PCRE(PHP<7.3)

最后一部分,包括\s需要是可选的以匹配没有它的字符串

尝试

^(Site\S\s\d+\S\d+)?(.*?)((\s)P.*)?$

https://regex101.com/r/SuvUDb/1

您还可以使用可选的非捕获组来不捕获 space 并使模式更具体一些:

^(Site:\h\d+\.\d+)?(.+?)(?:\h(P.*))?$
  • ^ 字符串开头
  • (Site:\h\d+\.\d+)?可选第1组,匹配Site:一个space和数字.个数字
  • (.+?) 捕获 组 2,最后匹配任何字符 1 次或更多次以不匹配空字符串
  • (?:\h(P.*))? 可选非捕获组,匹配 space 并捕获 P 和 0+ 次 group 3[= 中的任何字符33=]
  • $ 字符串结束

Regex demo