Тема: Питання по preg_match

Привіт.
Є в мене такий скрипт

preg_match_all("/[А-Яа-яіІєЄ]+/u", 'Привіт світ. Hello world. Це текст. This is text', $matches);
print_r($matches);

який просто напросто витягує українські слова з тексту.
Проблемка у тому, що кожне слово, він поміщає у окремий елемент
масиву, тобто результатом виконання скрипта буде таке:

Array
(
    [0] => Array
        (
            [0] => Привіт
            [1] => світ
            [2] => Це
            [3] => текст
        )

)

Питання, чи можна якось витягувати по цілій строці, наприклад
щоб першим елеменом було "Привіт світ" а другим "Це текст" ?

2 Востаннє редагувалося Vo_Vik (06.03.2013 20:04:39)

Re: Питання по preg_match

Добав \s в умову, можеш ще крапку добавити при потребі.
Тільки потім треба лишні пробели повикидати з результатів.

Подякували: Адріян Ігорович1

Re: Питання по preg_match

Vo_Vik написав:

Добав \s в умову, можеш ще крапку добавити при потребі.

Дякую, працює.

4

Re: Питання по preg_match

/([А-Яа-яіІєЄґҐ]+)(\s[А-Яа-яіІєЄґҐ]+)+/u - спробуй ще так

5

Re: Питання по preg_match

http://habrastorage.org/storage2/b00/50b/986/b0050b9864280cbc54d1b3599fbe5fda.gif

Re: Питання по preg_match

:D

ще таке питання, є наприклад такий код:

<?php

 ini_set("display_errors",1);
 
 error_reporting(E_ALL);
 
 echo "Це український текст";
 
 print("У тегу %s php");

?>
текст поза межами php коду

Коли я витягую строки на українській мові
таким скриптом:

$fp = fopen("main.php","r");
 
 while(!feof($fp))
  {
   preg_match_all("/[\sА-Яа-яіІєЄїЇ]+/u", fgets($fp), $matches); 
   print_r($matches);
  }
  fclose($fp);

То результатом є наступне:

Прихований текст

Array
(
    [0] => Array
        (
            [0] => 

        )

)
Array
(
    [0] => Array
        (
            [0] => 

        )

)
Array
(
    [0] => Array
        (
            [0] =>  
            [1] => 

        )

)
Array
(
    [0] => Array
        (
            [0] =>  

        )

)
Array
(
    [0] => Array
        (
            [0] =>  
            [1] => 

        )

)
Array
(
    [0] => Array
        (
            [0] =>  

        )

)
Array
(
    [0] => Array
        (
            [0] =>  
            [1] =>  
            [2] => Це український текст
            [3] => 

        )

)
Array
(
    [0] => Array
        (
            [0] =>  

        )

)
Array
(
    [0] => Array
        (
            [0] =>  
            [1] => У тегу 
            [2] =>  
            [3] => 

        )

)
Array
(
    [0] => Array
        (
            [0] => 

        )

)
Array
(
    [0] => Array
        (
            [0] => 

        )

)
Array
(
    [0] => Array
        (
            [0] =>  

        )

)
Array
(
    [0] => Array
        (
            [0] => текст поза межами 
            [1] =>  коду

        )

)
Array
(
    [0] => Array
        (
        )

)

Що зробити, щоб preg_match_all
не додавав ті пусті елементи у масив ?

7

Re: Питання по preg_match

Глянь вище, перед картинкою. Тільки друкуй $matches[0]

8 Востаннє редагувалося Адріян Ігорович (06.03.2013 21:00:47)

Re: Питання по preg_match

Vo_Vik написав:

Глянь вище, перед картинкою. Тільки друкуй $matches[0]

Лишні елементи масиву забрало, дякую.
Та лишилося ще дещо, чомусь слово "коду" зі строки "текст поза межами php коду"
не попало у масив.

Re: Питання по preg_match

Причину знайшов, якщо є тільки одне слово,
то воно його не додає у масив. Як це виправити ?

10

Re: Питання по preg_match

Вибачаюсь, маленька поправочка
/([А-Яа-яіІєЄґҐ]+)(\s[А-Яа-яіІєЄґҐ]+)*/u

Подякували: Адріян Ігорович1

11

Re: Питання по preg_match

Тепер ніби все працює. Дякую.

12

Re: Питання по preg_match

Доречі, ці регулярні вирази будуть працювати не тільки в PHP. Чи нема на форумі кращого розділу для них?

13

Re: Питання по preg_match

/((\s)*[А-Яа-яіІєЄґҐ]+)+/u - спрощена регулярка, яка працює для будь-якої кількості пробілів між словами.

Подякували: miroslav.chandler1

14 Востаннє редагувалося Адріян Ігорович (08.03.2013 21:41:41)

Re: Питання по preg_match

А ще таке питання
Є наприклад строка "Привіт, мене звати %user%"
Як зробити, щоб preg_match рахував "Привіт, мене звати"
як одне ціле ? Бо якщо юзати попередні регулярки,
то "Привіт, мене звати" розділяється на 2 частини.
Пробував ставити в умові пошуку "," але воно тоді в
заносить "Привіт, мене звати" і просто ","

15

Re: Питання по preg_match

(\s)* - Оце зміни на [\s,]*

Подякували: Адріян Ігорович1