preg_match('/te**ed/i', 'tested', $matches);
给了我以下错误:
错误:在偏移3处不重复
如何让模式实际包含*
?
答案 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