php regex - 从字符串的开头和结尾匹配

我使用在线正则表达式测试程序来构建一个简单的正则表达式,但是使用php的preg_match它为$提供了一个未知的修饰符。 </ p>

这是正则表达式:</ p>

  if(preg_match('/(^ Keyword1 / $ | ^ Keyword2 / $)/',  $ input,$ matches))
</ code> </ pre>

我要做的是检查$ input是否等于Keyword1 /或Keyword2 /(完全匹配)。 我知道我可以使用“if($ input =='Keyword1 /')轻松完成此操作”但是我宁愿在代码中使用几行正则表达式和十几个if语句。</ p>

< p>有人帮帮我吗?</ p>
</ div>

展开原文

原文

I used an online regex tester to build a simple regex, however using php's preg_match it's giving an unknown modifier for $.

Here is the regex:

if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 

What I'm trying to do is check if $input equals either Keyword1/ or Keyword2/ (exact match). I know I can easily do this with "if ($input == 'Keyword1/')" however I'd rather have a few lines of regex vs a dozen if statements in the code.

Anyone help me out?

dqlxtv1452
dqlxtv1452 注意,您还可以使用允许的关键字数组和in_array
接近 9 年之前 回复

3个回答



你需要转义正则表达式中的 / </ code>,因为 / </ code>也正在 用作分隔符:</ p>

  if(preg_match('/(^ Keyword1 \ / $ | ^ Keyword2 \ / $)/',$ input,$ matches))
^ ^
</ code> </ pre>

或者使用不同的分隔符:</ p>

  if(preg_match('〜(^ Keyword1 / $ |  ^ Keyword2 / $)〜',$ input,$ matches))
^ ^
</ code> </ pre>

由于你的子正则表达式都有共同的锚点,你可以简化你的正则表达式 as:</ p>

  if(preg_match('〜^(Keyword1 | Keyword2)/ $〜',$ input,$ matches))
</ code> </ pre>

为什么正则表达式中出现警告?</ strong> </ p>

 '/(^ Keyword1 / $ | ^ Keyword2 / $)/'

</ code> </ pre>

由于您使用 / </ code>作为分隔符,因此正则表达式中的第二个 / </ code>使PHP认为它是 你的正则表达式的结束。 现在,PHP在结束分隔符之后接受正则表达式修饰符,如 s </ code>, m </ code>, i </ code>。 但在你的情况下,PHP在结束分隔符后看到 $ </ code>。 由于 $ </ code>不是有效的修饰符,因此会收到警告:</ p>


PHP警告:preg_match():未知修饰符'$'in .. 。</ p>
</ blockquote>
</ div>

展开原文

原文

You need to escape the / inside the regex because / is also being used as delimiter:

if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches)) 
                           ^            ^ 

Alternatively use a different delimiter:

if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches)) 
                ^                         ^

Since both your sub-regexs have common anchors you can simplify your regex as:

 if (preg_match('~^(Keyword1|Keyword2)/$~', $input, $matches)) 

Why the warning in your regex ?

'/(^Keyword1/$|^Keyword2/$)/'

Since you are using / as delimiter, the 2nd / in your regex makes PHP think it is the end of your regex. Now PHP accepts regex modifiers like s, m, i after the closing delimiter. But in your case PHP sees a $ after the closing delimiter. Since $ is not a valid modifier you get the warning:

PHP Warning: preg_match(): Unknown modifier '$' in ...

duandan9680
duandan9680 正是我需要的,谢谢!
接近 9 年之前 回复



问题是您在正则表达式中使用了 / </ code>而没有转义它。</ p>

这是您正在寻找的,但可能会更好一点:</ p>

 '/ ^(Keyword1 | Keyword2)\ / $ /'\  n </ code> </ pre> 
</ div>

展开原文

原文

The issue is that you've used the / inside your regex without escaping it.

Here's what you're looking for, but maybe a little better:

'/^(Keyword1|Keyword2)\\/$/'



怎么样:</ p>

  preg_match('/ ^ Keyword [1-2]  \ / $ /',$ input,$ matches)
</ code> </ pre>
</ div>

展开原文

原文

What about:

preg_match('/^Keyword[1-2]\/$/', $input, $matches)

dr200166
dr200166 是啊,没错
接近 9 年之前 回复
duandi1636
duandi1636 [12]也会这样做,但我会假设“keyword1”只是一个例子,而不是他正在寻找的实际字符串。
接近 9 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐