Софтуерно Инженерство
Loading...
+ Нов въпрос
Keeper avatar Keeper 18 Точки

[Technical Issue] PHP/MySQL - Регулярен израз като разделител на explode()

Имам един низ който искам да обърна в масив, но искам да отделя всяка дума с регулярен израз. С долната функция хващам цяла дума например:

function substr_count_array($haystack, $needle){
       $initial = 0;
       $bits = explode(' ', $haystack);
       foreach ($needle as $substring) {
            if (!in_array($substring, $bits))
                continue;

            $initial += substr_count($haystack, $substring);
       }
       return $initial;
}


Проблемът е, че хваща стринга "animal", но не и "animals". А ако го направя по следния начин:

function substr_count_array2($haystack, $needle){
       $initial = 0;
       foreach ($needle as $substring) {
              $initial += substr_count($haystack, $substring);
       }
       return $initial;
}


лови, да кажем 'а' след като се съдържа в стринга "animals" и връща 2. Дайте идея как да го explode() като ползвам регулярка като разделител, за да мога да търся за цялата дума + каквото и да е след или пред нея (защото не мога да знам какво следва след или предхожда думата). Защото сега търси думите разделени със space.

Възможно ли е с preg_split() да стане? Ако да - как?

Защото така:

preg_split('(.+?)', $haystack)

preg_split('(.*?)', $haystack);

или така:

preg_split('/^\S{6,}\z/', $haystack);

не работи. А със [\s\S] не хваща разстояния.

 

П.С. Да отбележа, че въпросът не е свързан с домашните.

Тагове:
0
PHP Web Development Basics
a_rusenov avatar a_rusenov 1103 Точки
Best Answer

Пробвай с \W+ (ескейпва всички non-character символи).

$text = "Animals are ;awesome creatures, which I... adore greatly!";
$result = preg_split("/\W+/", $text, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);
/* Array ( [0] => Animals [1] => are [2] => awesome [3] => creatures [4] => which [5] => I [6] => adore [7] => greatly ) */

-1 като трети параметър на preg_split ти позволява да ползваш флагове - а именно да добавиш флага PREG_SPLIT_NO_EMPTY, който ти маха празните елементи.

1
Keeper avatar Keeper 18 Точки

Тъкмо го направих така. Благодаря все пак за времето и примера :)

1
a_rusenov avatar a_rusenov 1103 Точки

Няма проблем, може ли само да кажеш как си форматира кода в първия пост? :)

0
Keeper avatar Keeper 18 Точки

Format -> Formats -> Blocks -> Blockquote и оцветих с text-color по отделно всяка keyword.

1