Что нового

Замена регулярным выражением с соблюдением условия

gmtnzx

Новичок
Сообщения
2
Репутация
0
Всем доброго времени суток.
Нужна помощь c регулярными выраженями

Есть скрипт
Код:
$string = StringRegExpReplace(' googledotcom ', '(^|[^A-z0-9])[a-z]{12}([^A-z0-9]|$)', 'OK')

ConsoleWrite('"' & $string & '"' & @CRLF)


Он заменяет строку " googledotcom " на "OK", захватывая для замены такие выражения в скобках как: '^|[^A-z0-9]' (начало строки ИЛИ не буква и не цифра) и '[^A-z0-9]|$' (конец строки ИЛИ не буква и не цифра). Нужно же сделать так, чтобы он лишь проверял соблюдение в строке этих выражений, а заменял уже "googledotcom", который подходит по шаблону '[a-z]{12}'.
В итоге должно получится в случае с " googledotcom " не "OK", а " OK ", без удаления пробелов. Либо, к примеру, в случае с "1googledotcom " должно получится "1googledotcom ", так как '^|[^A-z0-9]' в начале строки не было соблюдено.
 
A

Alofa

Гость
Код:
$sString = ' googledotcom '
; $sString = ' autoitscript '

$sString = StringRegExpReplace($sString, '^(\h)[a-z]{12}(\h)$', '\1OK\2')
MsgBox(262144, Default, '"' & $sString & '"') ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
 
Автор
G

gmtnzx

Новичок
Сообщения
2
Репутация
0
Alofa сказал(а):
Код:
$sString = ' googledotcom '
; $sString = ' autoitscript '

$sString = StringRegExpReplace($sString, '^(\h)[a-z]{12}(\h)$', '\1OK\2')
MsgBox(262144, Default, '"' & $sString & '"') ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
Да, хорошо, работает.
А если строка большая, в ней несколько слов, подходящих по '[a-z]{12}', к примеру строка "autoit googledotcom yande:rofl:otru autoitscript"
Также нужно учесть '^|[^A-z0-9]' перед словом, найденном по шаблону '[a-z]{12}' и '[^A-z0-9]|$', после слова, найденном по шаблону '[a-z]{12}'.
Как-то возможно такое реализовать?


Добавлено:
Сообщение автоматически объединено:

Получилось, пользуйтесь (добавил еще в шаблон для проверки перенос строки):

Код:
$sString = 'autoit googledotcom yandexdotru autoitscript'

$sString = StringRegExpReplace($sString, '(\R|^|[^A-z0-9])[a-z]{12}([^A-z0-9]|$|\R)', '\1OK\2')
MsgBox(262144, Default, '"' & $sString & '"') ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
 
Верх