preg_match匹配模式,其中带有星号(*)

时间:2011-07-07 02:04:29

标签: php regex preg-match

preg_match('/te**ed/i', 'tested', $matches);

给了我以下错误:

  

错误:在偏移3处不重复

如何让模式实际包含*

4 个答案:

答案 0 :(得分:7)

要使用文字星号,您必须使用反斜杠转义它们。要匹配文字te**ed,您可以使用如下表达式:

preg_match('/te\*\*ed/i', 'tested', $matches); // no match (te**ed != tested)

但我怀疑这是你想要的。如果您的意思是匹配任何字符,则需要使用.

preg_match('/te..ed/is', 'tested', $matches); // match

如果你真的想要任何两个小写字母,那么这个表达式:

preg_match('/te[a-z]{2}ed/i', 'tested', $matches); // match

答案 1 :(得分:1)

在任何字符之前加上一个反斜杠告诉PHP该字符应该按照原样,而不是一个特殊的正则表达式字符。所以:

preg_match('/te\\**ed/i', 'tested', $matches);

答案 2 :(得分:1)

基于Viktor Kruglikov的回答,这是PHP 7.3做到这一点的方式:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-group">
  <div class="checkbox">
    <input value="1" name="checkbox-1" id="checkbox-1" type="checkbox"/>
    <label for="checkbox-1"></label>                           
  </div>
  <div class="field">
    <input type="text" value="" id="field-1" name="field-1">
    <label class="form-label">Field 1</label>
  </div>
</div>

<div class="form-group">
  <div class="checkbox">
    <input value="1" name="checkbox-2" id="checkbox-2" type="checkbox"/>
    <label for="checkbox-2"></label>                           
  </div>
  <div class="field">
    <input type="text" value="" id="field-2" name="field-2">
    <label class="form-label">Field 2</label>
  </div>
</div>

<div class="form-group">
  <div class="checkbox">
    <input value="1" name="checkbox-3" id="checkbox-3" type="checkbox"/>
    <label for="checkbox-3"></label>                           
  </div>
  <div class="field">
    <input type="text" value="" id="field-3" name="field-3">
    <label class="form-label">Field 3</label>
  </div>
</div>

<button type="button" id="btn">click</button>

答案 3 :(得分:0)

如果您想使用类似星号的搜索,可以使用下一个功能:

function match_string($pattern, $str)
{
  $pattern = preg_replace('/([^*])/e', 'preg_quote("$1", "/")', $pattern);
  $pattern = str_replace('*', '.*', $pattern);
  return (bool) preg_match('/^' . $pattern . '$/i', $str);
}

示例:

match_string("*world*","hello world") // returns true
match_string("world*","hello world") // returns false
match_string("*world","hello world") // returns true
match_string("world*","hello world") // returns false
match_string("*ello*w*","hello world") // returns true
match_string("*w*o*r*l*d*","hello world") // returns true