- Сообщения
- 8,673
- Репутация
- 2,486
Вот пример:
То что я имею в виду находится в $sPattern: (?:<span class="au3_S14">) - это и есть тот набор символов который должен помешать замене (предотвратить её).
В данном виде пример отрабатывает коректно - на выходе мы имеем исходную строку, т.е ничего не заменяется. Однако если мы раскомментируем вторую строчку с $vTest, то получим на выходе также исходный результат, хотя в этом случае должна произойти замена, т.к (?:<span class="au3_S14">) не найден в строке.
заметил одну особенность - если в этой группе символов удалить пробелы, то всё работает как надо, но это не выход, мне нужно проверять всю группу как одно целое вхождение.
В чём дело, что я тут не учёл, или может это вообще неверный подход для использования группы в наборе?
Добавлено:
Т.е иными словами, вопрос в том, как использовать захватывающие группы ("(группа)") внутри набора ("[набор]")?
Нужно чтобы совпало всё что угодно, кроме указанной группы.
Добавлено:
CreatoR [?]
Код:
$vTest = '<span class="au3_S9">$hGUI</span><span class="au3_S8">.</span><span class="au3_S14">GUICreate</span>'
;$vTest = '<span class="au3_S9">$hGUI</span> <span class="au3_S8">=</span> GUICreate'
$sPattern = '([^\w\$(?:<span class="au3_S14">)]+|\A)((?i)GUICreate)(\W+|$)'
$sReplace = '\1<span class="au3_S4">\2</span>\3'
$vTest = StringRegExpReplace($vTest, $sPattern, $sReplace)
ConsoleWrite($vTest & @LF)
То что я имею в виду находится в $sPattern: (?:<span class="au3_S14">) - это и есть тот набор символов который должен помешать замене (предотвратить её).
В данном виде пример отрабатывает коректно - на выходе мы имеем исходную строку, т.е ничего не заменяется. Однако если мы раскомментируем вторую строчку с $vTest, то получим на выходе также исходный результат, хотя в этом случае должна произойти замена, т.к (?:<span class="au3_S14">) не найден в строке.
заметил одну особенность - если в этой группе символов удалить пробелы, то всё работает как надо, но это не выход, мне нужно проверять всю группу как одно целое вхождение.
В чём дело, что я тут не учёл, или может это вообще неверный подход для использования группы в наборе?
Добавлено:
Сообщение автоматически объединено:
Т.е иными словами, вопрос в том, как использовать захватывающие группы ("(группа)") внутри набора ("[набор]")?
Нужно чтобы совпало всё что угодно, кроме указанной группы.
Добавлено:
Сообщение автоматически объединено:
CreatoR [?]
Ну всё верно, перед GUICreate ведь таки есть пробел - значит группа игнорируется, все символы в ней (включая сами скобки) определяются как в наборе (каждый символ по отдельности), и это очень плохо...заметил одну особенность - если в этой группе символов удалить пробелы, то всё работает как надо