我正在尝试构建一个正则表达式,它将替换字符串中的标记%aa%和%cc%。所有案例如下:
1) /%aa%/%cc%/bb => should replace only %cc%
2) /%aa%/%cc%/ac => should replace only %cc%
3) /bb/%aa%/%cc% => should replace only the last %cc%
4) /bb/%aa% => should replace %aa%
5) /bb/ac/%aa%/%cc%/ac/bb => should replace only the last %cc%
我有以下正则表达式,涵盖了大多数情况下的期望2和5,基本上包含与标记相同的字符。
正则表达式模式:%(?|(?|aa)|(?|cc))%(?=[^(aa|cc)]*($)+)
语言是PHP。
感谢。
答案 0 :(得分:0)
您的正则表达式包含冗余分支重置组(403 (Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.)
)和放入字符类 <Type Name="Windows.UI.Text.FontWeights" Dynamic="Required All" />
的损坏分组,以及字符串锚定量结束((?|...|...)
),其中也是一个用户错误(不需要在这里捕获锚点,只需测试一次)。
您可以使用以下正则表达式:
[^(aa|cc)]*
请参阅regex demo
对于独立字符串,您还可以添加($)+
单行(DOTALL)修饰符:'~%(?:aa|cc)%(?!.*%(?:aa|cc)%)~'
。
如果在~s
或'~%(?:aa|cc)%(?!.*%(?:aa|cc)%)~s'
到目前为止(?!.*%(?:aa|cc)%)
之后显示aa
或cc
,则aa
否定前瞻会失败。