Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] StringRegExpReplace - очистить строку при наличии контрольного слова (http://forum.oszone.net/showthread.php?t=149584)

asdf8 02-09-2009 15:18 1209659

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

Код:

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

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

beve 02-09-2009 15:35 1209681

Цитата:

Цитата asdf8
чтобы при отсутствии в строке определенного слова
(в примере "test")... возвращал пустую строку. »

Тебе для этого лучше использовать: StringInStr

asdf8 02-09-2009 15:42 1209686

Цитата:

Цитата beve
Тебе для этого лучше использовать: StringInStr »


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

Creat0R 02-09-2009 16:01 1209703

Тему закрываю в связи с нарушением пункта 2.7 общих правил.

В ПМ принимается предложение по новому названию темы, пример того как может именоваться подобная тема, можно увидеть тут.

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

Creat0R 02-09-2009 16:30 1209730

Цитата:

Цитата asdf8
нужен паттерн, чтобы при отсутствии в строке определенного слова
(в примере "test") StringRegExpReplace возвращал пустую строку »

А почему именно Replace? Ну можно так:

Код:

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

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


asdf8 02-09-2009 16:34 1209732

Спасибо beve , что откликнулся в ПМ

Цитата:

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

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

Цитата:

Цитата Creat0R
Ну можно так: »

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

amel27 02-09-2009 16:42 1209741

asdf8, еще вариант:
Код:

$str = "Script Start"
$tst = "test"
$out = StringRegExpReplace($str,'^.*?(?:(\Q'& $tst &'\E).*|$)','\1')

ConsoleWrite($out &@CRLF)


asdf8 02-09-2009 16:53 1209754

Спасибо всем ответившим

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


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


Время: 11:26.

Время: 11:26.
© OSzone.net 2001-