Регулярные выражения

ST
На сайте с 26.02.2008
Offline
3
661

Ничего что здесь? ;)

Есть такая тулза "TextPipe", мощный редактор текстов. У него есть встроенные шаблоны, но их не всегда хватает. На помощь приходят регулярные выражения, но и тут не всё так гладко... Отсюда вопрос: как сделать следующее, может знает кто??

Из текста нужно удалить строки, которые содержат слово FOZ. А проблема собственно в том, что TextPipe цепляет это слово не только как отдельное, но и в составе других слов (где FOZ может располагаться как в начале, так и в конце какого-то слова). Нужно же, чтобы обрабатывалось только это слово, т.е. оно может быть в начале предложения, где-нибудь в середине, ну и в конце, естественно - отделённое от других пробелами.

пример:

1. foz afagl asksf.

2. jalh lkafl kgh sdsf.

3. hfs adafoz jdsfg.

4. asf gd foz.

5. fsg fozop dfs.

здесь должны удалиться только строки под номерами 1 и 4.

Вот как такое сделать? Впечатление, что в TextPipe никак. Захватывает (на вышеприведённом примере) и 3 и 5 строки, вместе с 1 и 4 разумеется. Уж всякие выражения составлял :rolleyes:

курилка :)

[Удален]
#1

Кто здесь???

Rulin
На сайте с 16.01.2008
Offline
143
#2

на:

<?php

$foz = array(
'foz afagl asksf.',
'jalh lkafl kgh sdsf.',
'hfs adafoz jdsfg.',
'asf gd foz.',
'fsg fozop dfs.'
);

$result = preg_replace('/(?:(?:(^)foz([\s.]|$))|(?:(\s)foz([\s.]|$)))/i','$1$2$3$4',$foz);

print_r($result);
?>

результат:

Array

(
[0] => afagl asksf.
[1] => jalh lkafl kgh sdsf.
[2] => hfs adafoz jdsfg.
[3] => asf gd .
[4] => fsg fozop dfs.
)
Bitcoin Debit Card
fima32
На сайте с 12.01.2006
Offline
132
#3

Rulin, ему нужно удалить всю строку, которая содержит FOZ отдельно, а не само это слово, тут условие добавлять надо

Rulin
На сайте с 16.01.2008
Offline
143
#4

сорри, слишком бегло прочитал т.з.

ну тогда так:

<?php

$foz = array(
'foz afagl asksf.',
'jalh lkafl kgh sdsf.',
'hfs adafoz jdsfg.',
'asf gd foz.',
'fsg fozop dfs.'
);

$result = preg_replace('/^.*((^foz([\s.]|$))|(\sfoz([\s.]|$))).*$/i','',$foz);

print_r($result);
?>

результат:

Array

(
[0] =>
[1] => jalh lkafl kgh sdsf.
[2] => hfs adafoz jdsfg.
[3] =>
[4] => fsg fozop dfs.
)
ST
На сайте с 26.02.2008
Offline
3
#5
Rulin:

ну тогда так:

. . . . .

Спасибо :)

Но если кто-то знает, вдруг, можно ли это реализовать в TextPipe, будет просто замечательно! Там работает всё, что нужно (кроме удаления дублей правда, только если через сортировку, бред какой-то), не работает только поставленная задача, а объём информации обрабатывать надо большой и часто меняющийся, поэтому любезно предоставленным скриптом от Rulin это будет делать неудобно, к сожалению...

Но всё-равно, ещё раз спасибо, скрипт рабочий ;)

SsTAFii добавил 10.07.2008 в 08:25

да, и слов, по которым нужно делать удаление, огромное количество :)

SsTAFii добавил 10.07.2008 в 09:25

☝ ☝ ☝

В общем, утром, на свежую голову, решил прикрутить указанные в скрипте выше регулярные выражения в TextPipe, а именно в фильтр "Удалить согласующиеся строки", в следующем виде:

^.*(((^foz|^roz)([\s.]|$))|((\sfoz|\sroz)([\s.]|$))).*$

Как результат, удаляются строки, которые содержат в себе ОТДЕЛЬНЫЕ слова foz или roz, т.е. - что и требовалось доказать! В очередной раз спасибо за скрипт! ;) Но выражение конечно жесть, думаю, что так и не догадался бы сам...

Раз уж эта проблема оказалась решаемой, может тогда кто подскажет, как удалить повторяющиеся строки из их множества?

Дело в том, что TextPipe позволяет это делать ТОЛЬКО с предварительно отсортированными строками (по алфавиту), т.е. повторы должны быть расположены друг за другом. Но это бред, тоже самое, что строки стихотворения отсортировать, или песни. И главное - не пойму с чем это связано! Такой мощный редактор, а с элементарными повторами, в нормальном виде, работать не умеет.

Может можно чего-нибудь придумать, кроме использования стороннего софта разумеется? 😎

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий