匹配一个不知道其位置的char

时间:2015-04-09 09:37:56

标签: php regex

我必须匹配sql LIKE运算符,它的参数中包含%。 我想在php(PCRE正则表达式)中得到运算符的参数,没有%

我要匹配的字符串可以是

field LIKE %?
field LIKE ?%
field LIKE %?%

?是将被替换的参数。

我的问题是%可能位于?的右侧,或位于其左侧,或两者兼而有之,我必须至少匹配一次。

我尝试使用\s*(%?\?%?)仅匹配参数,但它也适用于没有%

1 个答案:

答案 0 :(得分:2)

您可以使用此%(\?)|(\?)%

说明:

  • %(\?)查找%左侧(匹配%?和%?%)
  • (\?)%查找%右侧(匹配?%和%?%)

涵盖所有需要的案例。

请参阅Demo

编辑: -

如果您只想替换?使用(?<=%)(\?)|(\?)(?=%)

DEMO with substitution