Erebot  latest
A modular IRC bot for PHP 7.0+
TextWildcard.php
1 <?php
2 /*
3  This file is part of Erebot, a modular IRC bot written in PHP.
4 
5  Copyright © 2010 François Poirotte
6 
7  Erebot is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  Erebot is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with Erebot. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 namespace Erebot\Event\Match;
22 
39 class TextWildcard extends \Erebot\Event\Match\TextAbstract
40 {
41  protected function realMatch($prefix, $text)
42  {
43  $translationTable = array(
44  '\\*' => '.*',
45  '\\?' => '.',
46  '\\\\&' => '&',
47  '&' => '[^\\040]+',
48  );
49  $text = preg_replace('/\s+/', ' ', $text);
50  $pattern = preg_replace('/\s+/', ' ', (string) $this->pattern);
51  $prefixPattern = '';
52  if ($this->requirePrefix !== false) {
53  $prefixPattern = '(?:'.preg_quote($prefix).')';
54  if ($this->requirePrefix === null) {
55  $prefixPattern .= '?';
56  }
57  }
58  $pattern = "#^".$prefixPattern.strtr(
59  preg_quote($pattern, '#'),
60  $translationTable
61  )."$#i";
62  return (preg_match($pattern, $text) == 1);
63  }
64 }
A filter that matches the content of an event based on some wildcard pattern.