PDA

Показать полную графическую версию : [решено] StringRegExpReplace - очистить строку при наличии контрольного слова


asdf8
02-09-2009, 15:18
Суть вопроса: нужен паттерн, чтобы при отсутствии в строке определенного слова
(в примере "test") StringRegExpReplace возвращал пустую строку.
Типа:

$str='Script Start'
MsgBox(0,'',StringRegExpReplace($str,'^(.*test.*){0}$',''))

Естественно пример не рабочий

beve
02-09-2009, 15:35
чтобы при отсутствии в строке определенного слова
(в примере "test")... возвращал пустую строку. »
Тебе для этого лучше использовать: StringInStr

asdf8
02-09-2009, 15:42
Тебе для этого лучше использовать: StringInStr »


Да, со StringInStr можно сделать без проблем, но надо с StringRegExpReplace

Creat0R
02-09-2009, 16:01
Тему закрываю в связи с нарушением пункта 2.7 общих правил (http://forum.oszone.net/rules.html).

В ПМ принимается предложение по новому названию темы, пример того как может именоваться подобная тема, можно увидеть тут (http://forum.oszone.net/thread-148655.html).

Тема переименована по предложению asdf8 и открыта.

Creat0R
02-09-2009, 16:30
нужен паттерн, чтобы при отсутствии в строке определенного слова
(в примере "test") StringRegExpReplace возвращал пустую строку »
А почему именно Replace? Ну можно так:

$sStr = 'Script Start'
$sInStr = 'test'

MsgBox(0, '', StringRegExpReplace($sStr, '(.*' & $sInStr & '.*)|.*$', '\1'))

asdf8
02-09-2009, 16:34
Спасибо beve , что откликнулся в ПМ

$str='Script Start test'
$pattern="test"
If StringRegExpReplace($str,'.*('&$pattern&').*','\1') ==$pattern Then
MsgBox(0,"","есть такое слово")
Else
MsgBox(0,"","")
EndIf

Еще раз опишу суть проблемы. В начале работы скрипта вводятся несколько регю выражений (каждый раз разные),
Далее в цыкле производится обработка массива строк функцией StringRegExpReplace по заданным паттернам и нет никакой возможности обрабатывать другие условия - это полностью ломает первоначальную концепцию

Ну можно так: »

Вот это кажись то-что надо!

amel27
02-09-2009, 16:42
asdf8, еще вариант:
$str = "Script Start"
$tst = "test"
$out = StringRegExpReplace($str,'^.*?(?:(\Q'& $tst &'\E).*|$)','\1')

ConsoleWrite($out &@CRLF)

asdf8
02-09-2009, 16:53
Спасибо всем ответившим

amel27 - спасибо за ответ, в принципе пример работает, но видимо я сам
не упомянул, что в обратном случае должна возвращаться оригинальная строка.


Вопрос считаю решенным, тему - закрытой.




© OSzone.net 2001-2012