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

Статус
В этой теме нельзя размещать новые ответы.

zxxx

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

А чем еще можно делать?
 
А чем еще можно делать?
На соответствующем языке программирования.

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

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

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