10 слов в строке

Тема в разделе "Регулярные выражения", создана пользователем zxxx, 19 июн 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    нужно сделать регулярное выражение для строки, в котором могут содержатся не более 10 элементов(слов) разделенные пробелом, в каждом элементе могут содержаться маленькие и заглавные английские буквы, цифры, знак "-". И при этом каждый элемент возможно может быть окружен тэгами <h1></h1>
     
  2. _sokal_

    _sokal_

    Регистр.:
    25 дек 2009
    Сообщения:
    300
    Симпатии:
    139
    возможно можно написать короче,но я начал осваивать php
    не проверяет по регулярке,а просто копирует строки,где меньше 10 слов
    PHP:
    <?php

    $f1 
    File ("test.txt"); //файл с текстом
    $f fopen ("test1.txt""w"); //конечный файл
    for ($e=0$e<count($f1);$e++){
    $pieces explode(" "$f1 [$e]);

    if (
    11>count($pieces)){
    for (
    $i=0;$i<count($pieces);$i++){
    $pizzaa=$pieces;
    fputs ($f$pizzaa[$i]);
    if(
    $i<count($pieces)-1){
    fputs ($f" ");}

    }}

    }
    fclose ($f); 
    ?>
     
    zxxx нравится это.
  3. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    76
    PHP:
    <?php
    if (preg_match('%^(?:(?:<h1>)?(?:[0-9a-z\-]+)(?:</h1>)?\x20*){1,10}$%i'$source)) {
        
    // OK
    }
    ?>
    Проверять на наличие недопустимых символов внутри регулярки я бы не стал. Все используемые группы - non-capturing. И вообще, разбор строки делать лучше не регуляркой.
     
    zxxx нравится это.
  4. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    А чем еще можно делать?
     
  5. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    76
    На соответствующем языке программирования.

    Я не могу с уверенностью утверждать, что регулярка тут будет хуже, потому что не знаю входных параметров. Т.е. какой может быть строка и какими могут быть возможные ошибки.

    Например, строка "err.or word blabla" не удовлетворяет условиям, потому что первое слово содержит недопустимый символ. Однако, приведённая постом выше регулярка не обнаружит ошибки, сказав, что есть match по первым трём символам.

    Чтобы застраховаться от наличия недопустимого символа в первом слове, надо использовать условия внутри регэкспа: (?(?=if)then|else), но в данном случае это геморрой. Если наличие <h1> неважно, можно скормить строку функции strip_tags() и потом сделать preg_split() или explode() по пробелу, если речь идёт о PHP и разобрать полученный массив.
     
Статус темы:
Закрыта.