有没有办法在字符串中放一个通配符?我问的原因是因为目前我有一个函数来搜索两个子串之间的子串(即在"我的狗有跳蚤"这句话中抓住"我的"和"有跳蚤"之间的内容,导致"狗" ).
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是让它在字符串中使用通配符进行搜索.所以说我在"我的狗有跳蚤"这句话中搜索"%WILDCARD%"和"跳蚤" - 它仍会输出"狗".
我不知道我是否解释得太好但希望有人能理解我:P.非常感谢您的阅读!
Luk*_*ský 10
这是正则表达式实际上有用的少数情况之一.:)
if (preg_match('/my (\w+) has/', $str, $matches)) {
echo $matches[1];
}
Run Code Online (Sandbox Code Playgroud)
请参阅preg_match的文档.
通配符模式可以像这样转换为正则表达式模式
function wildcard_match($pattern, $subject) {
$pattern = strtr($pattern, array(
'*' => '.*?', // 0 or more (lazy) - asterisk (*)
'?' => '.', // 1 character - question mark (?)
));
return preg_match("/$pattern/", $subject);
}
Run Code Online (Sandbox Code Playgroud)
如果字符串包含特殊字符,例如 \.+*?^$|{}/'#,它们应该被 \-escaped
不要测试:
function wildcard_match($pattern, $subject) {
// quotemeta function has most similar behavior,
// it escapes \.+*?^$[](), but doesn't escape |{}/'#
// we don't include * and ?
$special_chars = "\.+^$[]()|{}/'#";
$special_chars = str_split($special_chars);
$escape = array();
foreach ($special_chars as $char) $escape[$char] = "\\$char";
$pattern = strtr($pattern, $escape);
$pattern = strtr($pattern, array(
'*' => '.*?', // 0 or more (lazy) - asterisk (*)
'?' => '.', // 1 character - question mark (?)
));
return preg_match("/$pattern/", $subject);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42584 次 |
| 最近记录: |