Что нового

StringRegExpReplace(): Убрать "|" по краям строки

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Есть строка вида:

"value1|value2|...|valueN"

Нужно убрать все пробелы и символы "|" по краям строки (если есть), например:

" |value1|value2|...|valueN| |||" => "value1|value2|...|valueN"

Т.к. регулярные выражения, это не про меня, то прошу помощи у "регулярщиков". Сейчас, прочитав справку, я сделал так:

Код:
$sValues = StringRegExpReplace(StringRegExpReplace($sValues, '\A[\s\x7C]*', ''), '[\s\x7C]*\Z', '')


Но хотелось бы за один проход. Это возможно?



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

value1...valueN - это любые строковые выражения.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
[?]
Цитата сказал(а):
любые строковые выражения

если пробелы тоже значимы:

Код:
$sValues = "   |value1|value2|...|valueN|   |||"
$sValues = StringRegExpReplace($sValues, '^(\|)*(.+?)(\|)*$', '\2')
ConsoleWrite('->' & $sValues & @CRLF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
asdf8 [?]
если пробелы тоже значимы
Это не удаляет в начале, вот так будет правильнее:

Код:
$sValues = "   |value1|value2|...|valueN|   |||"
$sValues = StringRegExpReplace($sValues, '\A[\s\|]*|[\s\|]*$', '')
ConsoleWrite($sValues & @CRLF)

это удаляет все пробелы и символы "|" в начале и в конце строки.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
То что надо. Спасибо.

А чем отличается "$" от "/Z"? Если записать так:

"\A[\s\|]*|[\s\|]*\Z"
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
Re: StringRegExpReplace(): Убрать \"|\" по краям строки

Yashied [?]
чем отличается "$" от "/Z"?
от /Z почти ничем, но если использовать в начале шаблона (?m), тогда "$" будет также означать окончание строки перед символом перевода строки (CR/LF), но и конец всей строки тоже сможет определить. Это полезно использовать когда очистку нужно сделать у мультистрокового текста:

Код:
$sValues = "   |value1|value2|...|valueN|   |||" & @CRLF & '|||valueNN||  | ||'
$sValues = StringRegExpReplace($sValues, '(?m)^[\s\|]*|[\s\|]*$', '')
ConsoleWrite($sValues & @CRLF)



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

Yashied [?]
[?]
« Последнее редактирование: Октябрь 04, 2009, 19:09:56 от Yashied »
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Re: StringRegExpReplace(): Убрать \"|\" по краям строки

CreatoR сказал(а):
...от \Z почти ничем, но если использовать в начале шаблона (?m), тогда "$" будет также означать окончание строки перед символом перевода строки (CR/LF), но и конец всей строки тоже сможет определить. Это полезно использовать когда очистку нужно сделать у мультистрокового текста...

:wacko:

Это точно не про меня. Что-то не дружу я с рег. выражениями, но все равно спасибо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
623
OffTopic:
Тема решена? ;D
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: StringRegExpReplace(): Убрать \"|\" по краям строки

А почему :
Код:
[\s\|]
а не
Код:
[\s|]
Помоему внутри множества отмена специального смысла символа "|" не требуется
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
gregaz [?]
Помоему внутри множества отмена специального смысла символа "|" не требуется
Не требуется, но это мера осторожности, оно не мешает во всяком случае.
 
Верх