Skip to content

Commit dcc4dd1

Browse files
committed
0.2
1 parent 74e9fa3 commit dcc4dd1

File tree

5 files changed

+245
-58
lines changed

5 files changed

+245
-58
lines changed

README.md

Lines changed: 89 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,128 @@
11
## DevelNext Preg Bundle
22
Пакет расширений для работы с функциями preg_* оригинального php
33

4+
### Changelog
5+
```
6+
-- 0.2 --
7+
[Fix] Исправлен баг с модификаторами
8+
[Fix] preg_replace и preg_replace_callback поддерживают работу с массивами
9+
[Add] preg_split
10+
[Add] preg_quote
11+
12+
-- 0.1 --
13+
[Add] preg_match_all
14+
[Add] preg_match
15+
[Add] preg_grep
16+
[Add] preg_replace
17+
[Add] preg_replace_callback
18+
```
19+
20+
421
### Поддерживаемые функции
522
```php
623
/**
724
* --RU--
8-
* Выполняет Выполняет глобальный поиск шаблона в строке
25+
* Выполняет глобальный поиск шаблона в строке
926
*
10-
* @param string $pattern - Искомый шаблон
11-
* @param string $subject - Входная строка
12-
* @param array $matches = null - Параметр будет заполнен результатами поиска
13-
* @param int $flags = PREG_PATTERN_ORDER
14-
* @return int
27+
* @link http://php.net/manual/function.preg-match-all.php
28+
*
29+
* @param string $pattern Искомый шаблон
30+
* @param string $subject Входная строка
31+
* @param array $matches (optional) Параметр будет заполнен результатами поиска
32+
* @param int $flags (optional) Возможные значения - PREG_PATTERN_ORDER, PREG_SET_ORDER
33+
* @return int
1534
*/
1635
function preg_match_all($pattern, $subject, &$matches = null, $flags = PREG_PATTERN_ORDER)
1736

1837
/**
1938
* --RU--
2039
* Выполняет проверку на соответствие регулярному выражению
2140
*
22-
* @param string $pattern - Искомый шаблон
23-
* @param string $subject - Входная строка
24-
* @param array $matches = null - Параметр будет заполнен результатами поиска
25-
* @return int
41+
* @link http://php.net/manual/function.preg-match.php
42+
*
43+
* @param string $pattern Искомый шаблон
44+
* @param string $subject Входная строка
45+
* @param array $matches (optional) Параметр будет заполнен результатами поиска
46+
* @return int
2647
*/
2748
function preg_match($pattern, $subject, &$matches = null)
2849

2950
/**
3051
* --RU--
3152
* Возвращает массив вхождений, которые соответствуют шаблону
3253
*
33-
* @param string $pattern - Искомый шаблон
34-
* @param array $subject - Входящий массив
35-
* @return array
54+
* @link http://php.net/manual/function.preg-grep.php
55+
*
56+
* @param string $pattern Искомый шаблон
57+
* @param array $subject Входящий массив
58+
* @param int $flags (optional) Возможное значение - PREG_GREP_INVERT
59+
* @return array
3660
*/
3761
function preg_grep($pattern, $input, $flags = 0)
3862

3963
/**
4064
* --RU--
4165
* Выполняет поиск и замену по регулярному выражению
4266
*
43-
* @param mixed $pattern - Искомый шаблон. Может быть как строкой, так и массивом строк.
44-
* @param callable $callback - Вызываемая callback-функция function( array $matches )
45-
* @param mixed $subject - Строка или массив строк для поиска и замены
46-
* @return string
67+
* @link http://php.net/manual/function.preg-replace.php
68+
*
69+
* @param mixed $pattern Искомый шаблон. Может быть как строкой, так и массивом строк.
70+
* @param mixed $replacement Строка или массив строк для замены
71+
* @param mixed $subject Строка или массив строк для поиска и замены
72+
* @return mixed Строка или массив, в зависимости от параметра $subject
4773
*/
4874
function preg_replace($pattern, $replacement, $subject)
4975

5076
/**
5177
* --RU--
5278
* Выполняет поиск по регулярному выражению и замену с использованием callback-функции
5379
*
54-
* @param string $pattern - Искомый шаблон
55-
* @param callable $callback - Вызываемая callback-функция function( array $matches )
56-
* @param string $subject - Строка для поиска и замены
80+
* @link http://php.net/manual/function.preg-replace-callback.php
81+
*
82+
* @param mixed $pattern Искомый шаблон (строка или массив)
83+
* @param callable $callback Вызываемая callback-функция function( array $matches )
84+
* @param mixed $subject Строка или массив для поиска и замены
85+
* @return mixed Строка или массив, в зависимости от параметра $subject
5786
*/
5887
function preg_replace_callback($pattern, $callback, $subject)
88+
89+
/**
90+
* --RU--
91+
* Разбивает строку по регулярному выражению
92+
*
93+
* @link http://php.net/manual/function.preg-split.php
94+
*
95+
* @param string $pattern Строка, содержащая искомый шаблон.
96+
* @param mixed $subject Входная строка
97+
* @param int $limit (optional) Если указан, функция возвращает не более, чем limit подстрок
98+
* @return array
99+
*/
100+
function preg_split($pattern, $subject, $limit = 0)
101+
102+
/**
103+
* --RU--
104+
* Экранирует символы в регулярных выражениях
105+
*
106+
* @link http://php.net/manual/function.preg-quote.php
107+
*
108+
* @param string $str Входная строка
109+
* @param string $delimiter (optional) Символ, который будет также экранироваться
110+
* @return string
111+
*/
112+
function preg_quote($str, $delimiter = null)
113+
```
114+
115+
### Поддерживаемые модификаторы
116+
```
117+
i (php - PCRE_CASELESS, jphp - CASE_INSENSITIVE)
118+
Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра.
119+
120+
m (php - PCRE_MULTILINE, jphp - MULTILINE)
121+
Многострочный поиск
122+
123+
s (php - PCRE_DOTALL, jphp - DOTALL)
124+
Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора.
125+
126+
u (php - PCRE_UTF8, jphp - UNICODE_CASE)
127+
Этот модификатор включает дополнительную функциональность: шаблон и целевая строка обрабатываются как UTF-8 строки.
59128
```

src/.resource

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ icon=develnext/bundle/preg/preg.png
66

77
class=develnext\\bundle\\preg\\pregBundle
88
author=Ts.Saltan
9-
version=0.1
9+
version=0.2
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
<ul>
2-
<li><code>bundle\preg\Preg</code> <i>(основной функционал, адаптер под preg_* функции)</i></li>
3-
<li><code>preg</code> <i>(поддержка preg_* функций)</i></li>
2+
<li><code>bundle\preg\Preg</code> - <i>адаптер regex для preg_* функций</i></li>
3+
<li><code>preg_grep</code> <i></li>
4+
<li><code>preg_match_all</code> <i></li>
5+
<li><code>preg_match</code> <i></li>
6+
<li><code>preg_replace</code> <i></li>
7+
<li><code>preg_replace_callback</code> <i></li>
8+
<li><code>preg_split</code> <i></li>
9+
<li><code>preg_quote</code> <i></li>
410
</ul>

src/vendor/develnext.bundle.preg.pregBundle/bundle/preg/Preg.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ public function __construct($pattern = null, $subject = null){
1919

2020
public function setSubject($subject){
2121
$this->subject = (string) $subject;
22-
Logger::debug('subject = '.var_export($subject, true));
22+
$this->log('subject = ', $subject);
2323
}
2424

25+
public function getPattern(){
26+
return $this->pattern;
27+
}
28+
2529
public function setPattern($pattern){
2630
$delim = substr($pattern, 0, 1);
2731
$endReg = str::lastPos($pattern, $delim);
@@ -33,9 +37,9 @@ public function setPattern($pattern){
3337
if(substr($this->pattern, 0, 1) == '^')$this->pattern = substr($this->pattern, 1);
3438
if(substr($this->pattern, -1) == '$')$this->pattern = substr($this->pattern, 0, -1);
3539

36-
Logger::debug('pattern = '.var_export($this->pattern, true));
37-
Logger::debug('modifs = '.var_export($modifs, true));
38-
Logger::debug('flags = '.var_export($this->flags, true));
40+
$this->log('pattern = '. $this->pattern);
41+
$this->log('modifs = ',$modifs);
42+
$this->log('flags = '. $this->flags);
3943

4044
return $this;
4145
}
@@ -75,15 +79,15 @@ protected function parseModifiers($modifiers){
7579

7680
foreach($modifiers as $m){
7781
if(isset($mods[$m])){
78-
$this->flags &= $mods[$m];
82+
$this->flags |= $mods[$m];
7983
}
8084
}
8185
}
8286

8387
public function count(){
8488
return $this->reg->getGroupCount() + 1;
8589
}
86-
90+
8791
public function matches(){
8892
$return = [];
8993
for($i = 0; $i < $this->count(); ++$i){
@@ -92,4 +96,23 @@ public function matches(){
9296

9397
return $return;
9498
}
99+
100+
const LOG = false;
101+
private function log(...$args){
102+
if(self::LOG !== true) return;
103+
$message = '';
104+
//$args = func_get_args();
105+
foreach($args as $arg){
106+
if(is_string($arg)){
107+
$message.=$arg;
108+
} else {
109+
$message.=var_export($arg, true);
110+
}
111+
}
112+
113+
$lines = explode("\n", trim($message));
114+
foreach ($lines as $line){
115+
Logger::Debug('[Preg] ' . $line);
116+
}
117+
}
95118
}

0 commit comments

Comments
 (0)