我有一组字符串:
如果 Site*** 出现在开头,如果 P*** 出现在最后,我想把它匹配成 3 列 否则全部匹配
我正在努力
^(.*)??(Site\S\s\d+\S\d+)?(.*)?\s(P.*?)$
但它不见了
我该怎么做?
正则表达式:PCRE(PHP<7.3)
答案 0 :(得分:2)
最后一部分,包括 \s
需要是可选的以匹配没有它的字符串
试试
^(Site\S\s\d+\S\d+)?(.*?)((\s)P.*)?$
答案 1 :(得分:1)
您还可以使用可选的非捕获组来不捕获空间并使模式更加具体:
^(Site:\h\d+\.\d+)?(.+?)(?:\h(P.*))?$
^
字符串开头(Site:\h\d+\.\d+)?
可选group 1,匹配Site:
一个空格和数字.
个数字(.+?)
捕获组2,最后匹配任意字符1次或多次以不匹配空字符串(?:\h(P.*))?
可选的非捕获组,匹配一个空格并捕获 P
和 组 3$
字符串结束