PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » RegExpPB


RegExpPB

Сообщений 1 страница 30 из 31

1

RegExpPB

Тест регулярных выражение

Скачать (Windows, Linux) (или с upload.ee на франц. сайте)

https://i.imgur.com/sVwz2HA.png

Обновления
Добавлена история регулярных выражений с сохранением.
Добавлен хоткей Ctrl+Enter
Добавлен цвет таймера.
Добавлены параметры ini-файла: "Поверх всех окон", число пунктов истории.
Добавлено сохранение выбора библиотеки.

Добавлен тест диапазона. Например в регвыре указан диапазон [\x{01}-\x{0F}] а что это такое, что он захватывает. Вот тут окно и покажет. В районе 0-127 показаны все символы, это показывает и по номерам как это работает, а для всего юникода в конце дописывает только захваченные символы, при этом если диапазон не последовательный между ними пустая строка показывающая что это начало другого диапазона.

Добавлен чередующая подсветка скобок.
Исправление предотвращающее беспрерывный сигнал о необходимости подкрасить регвыр.

Добавлен внешний языковой файл Lang.txt в папке конфигов
Добавлен параметр ForceLangSel = 2, который принудительно включает 1-й или 2-й язык в программе.
Улучшение изменение координат размеров гаджетов при изменении окна (полезно в Linux).
Исправлен путь к template в Linux.

Отредактировано AZJIO (19.05.2024 22:02:16)

+1

2

Обновил, добавил библиотеки регулярных выражений. Пока только Linux, не было времени тестить на Windows.

0

3

AZJIO
С библиотекой уже юзабельней смотрится, но интерфейс начинает перегружаться, предложение вывести библиотеку в отдельное окно, добавить там рюшечек типа поиск\фильтр, подробное описание, группы, рейтинги...
файлы библиотек запихнуть например в локальную базу sqlite. в дальнейшем можно будет прикрутить работу и онлайн базой...

0

4

Пару идей подкину, можно допилить и добавить...

Код:
Procedure SendToRegex101(regex$, text$, replacement$="", flags$="gm", delimiter$="")
  Protected url$="https://regex101.com/"
  url$ = SetURLPart(url$, "flavor", "pcre")
  If Len(regex$)
    url$ = SetURLPart(url$, "regex", regex$)
  Else
    ProcedureReturn
  EndIf
  If Len(text$)
    url$ = SetURLPart(url$, "testString", text$)
  Else
    ProcedureReturn
  EndIf
  url$ = SetURLPart(url$, "flags", flags$)
  If Len(replacement$)
    url$ = SetURLPart(url$, "subst", replacement$)
  EndIf
  If Len(delimiter$)
    url$ = SetURLPart(url$, "delimiter", delimiter$)
  EndIf
  url$ = URLEncoder(url$)
  ;Debug url$
  RunProgram(url$)
EndProcedure


regex$ = "[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"
text$ = "technic aaa@mail.ru e" + #CRLF$ + "work aa1@mail.com yes"
flags$ = "m"
replacement$ = "mail"
delimiter$ = "#"

SendToRegex101(regex$, text$)
;SendToRegex101(regex$, text$, replacement$, flags$ )

If CreateRegularExpression(0, regex$)
  If ExamineRegularExpression(0, text$)
    While NextRegularExpressionMatch(0)
      Debug "Match: " + RegularExpressionMatchString(0)
      Debug "    Position: " + Str(RegularExpressionMatchPosition(0))
      Debug "    Length: " + Str(RegularExpressionMatchLength(0))
    Wend
  EndIf
Else
  Debug RegularExpressionError()
EndIf
Код:
InitNetwork()
Enumeration 
  #JSON_Parse
  #RegEx  
EndEnumeration

Structure Regex101
  regex.s
  testString.s
  flags.s
  delimiter.s
  flavor.s
  substitution.s
  listSubstitution.s
  title.s
  isFavorite.i
  isEditable.i
  isOwner.i
  isLibraryEntry.i 
  libraryDescription.s
  libraryTitle.s
  libraryAuthor.s
  tags.i
  error.s
  errorId.s
EndStructure

Procedure.s TestRegex101(url$)
  HttpRequest = HTTPRequest(#PB_HTTP_Get, url$)
  If HttpRequest
    Response$ = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
    FinishHTTP(HTTPRequest)
    ;Debug Response$
  Else
    Debug "Request creation failed"
  EndIf
  
  ParseJSON(#JSON_Parse, Response$)
  ExtractJSONStructure(JSONValue(#JSON_Parse), @R.Regex101, Regex101)
  
  If Len(R\error)
    Debug "ERROR: " + R\error
  Else
    If R\flavor = "pcre" Or R\flavor = "pcre2" ; pcre2 not tested
      Debug "TITLE: " + R\libraryTitle
      Debug "REGEX: " + R\regex
      Debug "TEST STRING: " + R\testString
      Debug "AUTOR: " + R\libraryAuthor
    Else
      Debug R\flavor + " not support"
    EndIf
  EndIf
  
  Debug #CRLF$ +"++++++++ TESTING +++++++"
  If CreateRegularExpression(#RegEx, R\regex)
    If ExamineRegularExpression(#RegEx, R\testString)
      While NextRegularExpressionMatch(#RegEx)
        Debug "Match: " + RegularExpressionMatchString(#RegEx)
        Debug "    Position: " + Str(RegularExpressionMatchPosition(#RegEx))
        Debug "    Length: " + Str(RegularExpressionMatchLength(#RegEx))
      Wend
    EndIf
  Else
    Debug RegularExpressionError()
  EndIf
  
EndProcedure

Input$ = InputRequester("Title", "Please input url from regex101 :", "https://regex101.com/r/68YGMg/")
Version$ = "1"
JsonURL$ = ReplaceString(Input$, "/r/", "/api/regex/") + Version$

TestRegex101(JsonURL$)
RunProgram(Input$)

сторонняя библиотека: https://regex101.com/library?filterFlav … mp;search=
json: https://regex101.com/api/library/1/?fil … mp;search=
API: https://github.com/firasdib/Regex101/wiki/API

0

5

Lin написал(а):

рейтинги

Это практически все мои личные регулярки, я не собирался делать какой-то комбайн. Практически все регулярки делаются под конкретные задачи и нет такого что сделал  десяток для обработки html и на этом всё, там можно тысячами придумывать под индивидуальные задачи. Меняется синтаксис, меняется и регвыр, меняется запрос/избирательность, меняется регвыр, нужна оптимизация для скорости работы, опять же меняется регвыр. У меня лишь примеры показывающие как это работает, библиотека "примеры" содержит примитивные примеры для показа свойств метасимволов и прочего. На самом деле прога уже написана на AutoIt3 для Windows и работает в Linux с Wine. Делать в отдельном окне не хочу, если только плавающее как панель инструментов, но пока не вижу проблем, так как можно сделать на весь экран и список регвыров доступен. Про онлайн сервисы я в курсе, я сам делал шапку на руборде, куда я даю ссылку из проги, там представлены все эти сервисы и даже больше. Я перечитал все краткие учебники/справочники и на основе них сделал свой справочник на мой взгляд идеальный и полноценный, в нём всё представлено понятным не птичьим языком, приведены примеры использования, так что даже когда на форуме AutoIt3 спецы удивлялись переведя  через гугл, что у меня раскрыты все нюансы, даже в справке AutoIt3 не было такого, но благодаря моему участию и критике всё уже есть. А кому нужно больше, рекурсивные вызовы и прочие сложные конструкции, велком на офсайт движка регвыр, то есть к авторам с их длинной простынёй описания всех мелочей на английском языке.

Обновил
Добавил 2 кнопки "Добавить" и "Удалить", чтобы сохранить регвыр в библиотеку или удалить.

Отредактировано AZJIO (27.04.2022 17:55:40)

0

6

AZJIO
ну я предложил, а там уже как хочешь...

AZJIO написал(а):

Хочу добавить шаблоны, чтобы можно было получить готовый код для своей программы на основе введённых данных.

а сами шаблоны уже придумал? если да то поделись видением, думаю добавить генератор в regex101 но с видом шаблона ещё не определился..

Отредактировано Lin (28.04.2022 19:17:59)

0

7

Lin написал(а):

а сами шаблоны уже придумал?

шаблоны уже есть в папке "template". Суть когда нажимаешь кнопку "Copy" то в буфер обмена вставляется готовый пример, который можно вставить в свой код или просто потестировать. Но можно пойти дальше, сейчас 5 шаблонов по количеству опций: поиск, замена, массив, группы, пошаговый. Но так как для разных случаев шаблоны могут быть разные, то можно сделать открытие выбора файла для шаблона, тогда их можно хоть 10, хоть 100 делать, а не ограничиваться одним на каждый пункт. Далее можно сделать в папке template папки типов файлов, например "pb", "js" и т.д. тогда в каждую можно положить шаблоны для конкретного типа языка программирования, то есть прога не будет привязана только к PureBasic.

0

8

AZJIO написал(а):

Lng(18) = "(?x) игнор пробелов и коммент."

AZJIO написал(а):

(?x) - игнорирует пробелы и табуляции в регулярном выражении, кроме тех что в квадратных скобках. Пробелы позволяют сделать регулярное выражение легко читаемым. Позволяет в конце рег. выр. добавить комментарий после символа #

#PB_RegularExpression_Extended  : whitespace and '#' comments will be ignored.

whitespace - пустой символ, потерялись "табуляция, перенос страницы, возврат каретки, перевод строки" (CRLF, CR, LF, FF)

я вот не понял зачем и как нужен #PB_RegularExpression_AnyNewLine, желательно пример

AZJIO написал(а):

Суть когда нажимаешь кнопку "Copy" то в буфер обмена вставляется готовый пример, который можно вставить в свой код или просто потестировать.

именно это и будет в regex101, рассматриваю вариант нескольких примеров в одном "выхлопе", пока вот такое накидал:

Код:
Pattern$ = "color=(red|green|blue)"
String$ = "stype=bold, color=blue, margin=50, color=red"
Global pb_fags = 0  ;  заглушка

; Example 1:
; Tests the string against the Regular Expression
Procedure TestMatchRegular(Pattern$, String$)
  Protected RegExID = CreateRegularExpression(#PB_Any, Pattern$, pb_fags)
  If RegExID
    Protected Result = MatchRegularExpression(RegExID, String$)
    FreeRegularExpression(RegExID) ; Release its associated memory.
    ProcedureReturn Result
  Else
    Debug RegularExpressionError() ; Returns an human readable error about the latest failure
  EndIf
EndProcedure
If TestMatchRegular(Pattern$, String$)
  Debug "The string match!" + #CRLF$
Else
  Debug "No pattern found in the string" + #CRLF$
EndIf

; Example 2:
; Extract the string matched
Procedure TestMatchs(Pattern$, String$)
  Protected RegExID = CreateRegularExpression(#PB_Any, Pattern$, pb_fags)
  If RegExID
    If ExamineRegularExpression(RegExID, String$)
      While NextRegularExpressionMatch(RegExID)
        Debug "Match: " + RegularExpressionMatchString(RegExID)
        Debug "    Position: " + RegularExpressionMatchPosition(RegExID)
        Debug "    Length: "   + RegularExpressionMatchLength(RegExID)
        Debug #CR$
      Wend
    EndIf
    FreeRegularExpression(RegExID) ; Release its associated memory.
    ProcedureReturn #True
  Else
    Debug RegularExpressionError() ; Returns an human readable error about the latest failure 
  EndIf
EndProcedure
TestMatchs(Pattern$, String$)

; Example 3: 
; Extract the string matched by a group within the regular expression
Procedure TestGroups(Pattern$, String$)
  Protected RegExID = CreateRegularExpression(#PB_Any, Pattern$, pb_fags)
  Protected CountGroups = CountRegularExpressionGroups(RegExID)
  If Not CountGroups
    ProcedureReturn #False
  EndIf
  If RegExID
    If ExamineRegularExpression(RegExID, String$)
      While NextRegularExpressionMatch(RegExID)
        For IndexGroup = 1 To CountGroups
          Debug "Group " + IndexGroup + ": " + RegularExpressionGroup(RegExID, IndexGroup)
          Debug "    Position: " + RegularExpressionGroupPosition(RegExID, IndexGroup)
          Debug "    Length: "   + RegularExpressionGroupLength(RegExID, IndexGroup) + #CRLF$
        Next
      Wend
    EndIf
    FreeRegularExpression(RegExID) ; Release its associated memory.
    ProcedureReturn #True
  Else
    Debug RegularExpressionError() ; Returns an human readable error about the latest failure 
  EndIf
EndProcedure
TestGroups(Pattern$, String$)

0

9

Lin написал(а):

CRLF, CR, LF, FF

строка PureBasic не позволяет использовать эти символы, также как и тестовое поле в тестировщике.

Lin написал(а):

именно это и будет в regex101, рассматриваю вариант нескольких примеров в одном "выхлопе", пока вот такое накидал:

в шаблонах можно также сделать 3 примера в одном файле и тестировщик выдаст этот тройной пример.

Отредактировано AZJIO (01.05.2022 15:47:48)

0

10

AZJIO написал(а):

строка PureBasic не позволяет использовать эти символы

а так?

Код:
Pattern$ = "(?x)color=(red|green|bl"+#CRLF$+#CR$+#LF$+#TAB$+#FF$+"ue)"

вторая цитата взята отсюда: http://forum.ru-board.com/topic.cgi?for … &m=2#1
и там тоже потерялись переносы

AZJIO написал(а):

также как и тестовое поле в тестировщике.

немного не понял что есть "тестовое поле", но в поле "Регулярное выражение для поиска" - поддерживает и работает

0

11

Lin написал(а):

а так?

Тогда можно и так.

Код:
Pattern$ = ~"(?x)color=(red|green|bl\r\n\r\n\t\fue)"
Lin написал(а):

я вот не понял зачем и как нужен #PB_RegularExpression_AnyNewLine, желательно пример

Видимо связано с символами новой строки в разных платформах.

0

12

Lin
Это псевдо пример, мы же имеем ввиду использование пробельных символов для форматирования регулярного выражения, то есть разделения его на блоки, строки, комментарии, а то что можно вставить это в одной строке это другое. То есть мы можем вставлять пробельные символы но не идентифицировать их как используемые, а лишь для форматирования текста, лёгкого восприятия сложных регекспов. Ведь если написать PureBasic в одну строку его тоже будет практически невозможно понять.

#PB_RegularExpression_AnyNewLine на сколько я это понимаю но не тестировал, это когда указываешь \n (возможно \R), от если файл смешанный (или не смешанный) и перенос может быть как комбинацией \r\n или \n или \r, то регексп проглотит это как один перенос строки, хотя там 2 символа, возможно в что флаг мультистрока будет действовать для любого из этих символов, ведь в рег выре можно указать

Код:
(*CR)	Carriage return (@CR).
(*LF)	Line feed (@LF).
(*CRLF)	Carriage return immediately followed by linefeed (@CRLF).
(*ANYCRLF)	Any of @CRLF, @CR or @LF. This is the default newline convention.
(*ANY)	Any Unicode newline sequence: @CRLF, @LF, VT, FF, @CR or \x85.

0

13

AZJIO написал(а):

Это псевдо пример, мы же имеем ввиду использование пробельных символов для форматирования регулярного выражения, то есть разделения его на блоки, строки, комментарии,

ну вот же пример "на пальцах" - мультистроковая регулярка, разделенная на блоки типа для удобства...
https://i117.fastpic.org/big/2022/0501/ef/87789f45c04a5778d65ce3176c8543ef.png
https://i117.fastpic.org/big/2022/0501/8e/a32995750e1aa746167a420b8c56d48e.png

0

14

Пётр написал(а):

Видимо связано с символами новой строки в разных платформах.

Ага, уже разобрался...

Код:
Pattern$ = "^\w+ \w+$"
String$ = "Hello one" + #CR$+ "world two"
RegExID = CreateRegularExpression(#PB_Any, Pattern$, #PB_RegularExpression_MultiLine|#PB_RegularExpression_AnyNewLine)
If RegExID
  If ExamineRegularExpression(RegExID, String$)
    While NextRegularExpressionMatch(RegExID)
      Debug "Match: " + RegularExpressionMatchString(RegExID) + #CR$
    Wend
  EndIf
EndIf

0

15

AZJIO написал(а):

ну вот же пример "на пальцах"

так этот пример на пальцах, потому что у меня пока не удалось запретить более одной строки в Scintilla. По размеру поля видно же что это не предназначено для многострочного текста.

Сделал пример истории, чуть позже вмонтирую.

0

16

AZJIO написал(а):

так этот пример на пальцах

имхо, без разницы, ладно в программе (так автор видит), но получается "справочник на мой взгляд идеальный и полноценный" на самом деле не полный?

0

17

Lin
Я в своей практике не использую многострочные регулярные выражения и с многими с которыми я общаюсь с трудом могут составить логичное регулярное выражение. Из этого вывод зачем забивать головы неиспользуемым, если более важные первого уровня вещи человек не понимает? Когда научится перейдёт на официальный сайт и будет более глубоко разбираться, но обычно до этого дело не доходит, так как это много отнимает времени. Я не против если вы переведёте официальную справку и выложите нам на обозрение, как человек в совершенстве разбирающийся и которого не устраивает урезанный вариант. Лично я не хочу тратить на это время, даже в первом приближении быстро прокручивая всю эту простыню и ища интересные моменты, нахожу что мне хватает того что я знаю, а лишнее так и не удавалось применить, получается ты пытаешься применить ради применения, а это обычно происходит в счёт более важных дел которые начинают игнорироваться. так что я разумно трачу своё время. О существовании официальной я заявил, никого не заставляю пользоваться моим вариантом. Я лишь сказал что многие кто читал мой вариант более в полной мере понимали сомнительные моменты. И, кстати, движок развивается, если раньше он работал только с латинскими буквами в плане границ слова и не слова, в плане метасимвола слова, в плане верхнего и нижнего регистра, то теперь это работает для UTF-8, возможно зависит от флагов компиляции, не важно, просто идеально тестируя все сомнительные моменты я отписывал поведение на тот момент старой версии, то есть база примеров содержит текст где упоминается о том что это работает только для латинских букв, сразу предупреждаю, что я не переделывал свою старую базу и флаги скорее всего будут изменены на битовые флаги. То есть сейчас если делать свою базу, то она потом не будет работать, потому что сейчас я сделал совместимость со старой базой, флаги 1, 2, 3, 4, 5, а будут 1, 2, 4, 8, 16 и т.д.

Обновления
Добавлена история регулярных выражений с сохранением.
Добавлен хоткей Ctrl+Enter
Добавлен цвет таймера.
Добавлены параметры ini-файла: "Поверх всех окон", число пунктов истории.
Добавлено сохранение выбора библиотеки

Ещё обновление
Флаги теперь битовые, сохраняются и читаются (библиотеки конвертированы с битовым флагом)
Проверка если в поле замены ссылки на группы, то ставится галочка поддержки групп.

Отредактировано AZJIO (02.05.2022 23:45:51)

0

18

AZJIO написал(а):

Я в своей практике не использую многострочные регулярные выражения

Имхо, например вполне удобно объяснять новичкам как работают регулярки,
пример регулярки с блэк-джеком и многостроками:

Код:
^          #начало строки
	(\w+)  #слово
	.+?    #любая последовательность (не жадная)
	(\d+)  #число
$          #конец строки

зы: Ну, нет - так нет, я всё..

0

19

Lin
комментарий начинается на "#" и заканчивается переносом строки? Просто я знаю что есть язык, в котором регулярные выражения можно писать таким образом, а то как я знаю записывается так (?#это комментарий), а если в начале строки (?#), то в строке игнорируются пробелы и можно писать так

Код:
(?x)   ^   (.*\\)   ([^\\]+?)   (\.[^.]+)?   $

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

Посмотри тут последнюю главу, где сказано:

Язык CoffeScript задаёт собственный синтаксис регулярных выражений, который называется hereRegex. Забавно, синтаксис hereRegex поддерживает комментарии внутри регулярного выражения, но:

Не пойму правильно ли я сделал добавив флаги чекбоксы, ведь все они могут быть заданы флагами в самом регулярном выражении типа (?s) и т.д.

Отредактировано AZJIO (03.05.2022 05:27:24)

0

20

https://i117.fastpic.org/thumb/2022/0503/9e/bcae1dbf125ae0f50da2532ecf76a89e.jpeg  https://i117.fastpic.org/thumb/2022/0503/74/889db49ed64691a5184aff5f82c9bf74.jpeg https://i117.fastpic.org/thumb/2022/0503/4f/ef80be8d32198c352f07a494b8bf3a4f.jpeg https://i117.fastpic.org/thumb/2022/0503/14/0200852e09f1379395a8c4ecce6b3f14.jpeg

http://www.pcre.org/original/doc/html/p … html#SEC22

There are two ways of including comments in patterns that are processed by PCRE.
....
abc #comment \n still comment
On encountering the # character, pcre_compile() skips along, looking for a newline in the pattern. The sequence \n is still literal at this stage, so it does not terminate the comment. Only an actual character with the code value 0x0a (the default newline) does so.

AZJIO написал(а):

Не пойму правильно ли я сделал добавив флаги чекбоксы,

ну это типа глобальные флаги и действует на всю регулярку, а то что в самой регулярке, в разных местах можно включать и выключать - это уже другая история, из этого вылазит другая проблема: если добавлять генератор кода под другие языки то этих флагов будет мало..

Отредактировано Lin (03.05.2022 15:11:14)

0

21

Lin написал(а):

в разных местах можно включать и выключать - это уже другая история

история та же, в начале строки если флаг (?si) он действует на то что справа, поэтому и получается глобальный, но его можно также отменить (?-i), при чём что для одного что для второго варианта.

Можно предположить что скорость компиляции регвыра выше если используется флаг, без необходимости анализировать конструкцию (?si), ну и худший вариант если окажется что флаг просто под капотом добавляет (?si) в начало регулярного выражения.

Lin написал(а):

в локальную базу sqlite

если бы не размер ещё +3 Мб, можно было бы использовать. Проще типа xml или json. По крайней мере json у меня не увеличивал размер исполняемого файла, ну может 15 кб, надо ещё раз проверить. Даже вместо Scintilla можно было бы использовать RTF, но не было бы кроссплатформенности, в линукс, не было бы подсветки.

Отредактировано AZJIO (03.05.2022 16:48:24)

0

22

Обновление
Функция рег.выв изменена.
Добавлен чекбокс поддержки \r\n\t

0

23

Хорошо бы прикрутить "Старт" по F5 или сделать назначение клавиши. При множественном тестировании регулярок, постоянно перемещать мышку на кнопку становится раздражающим действием.

0

24

Webarion
Сейчас Ctrl + Enter

0

25

AZJIO написал(а):

Webarion
Сейчас Ctrl + Enter

Ок! Спасибо за исходник. Собрал себе с F5, так привычнее. У меня и версия под AutoIt давно с этой клавишей.

0

26

Обновления
Добавлена справка RegExp.chm
Добавлена галка "Поверх всех окон"
Добавлена кнопка "Переместить вверх" для обработки текста многократно разными регулярными выражениями.

+1

27

Последние несколько дней работаю с RegExpPB.

Вот чего мне очень не хватает:

1. Сохранение всех полей и настроек. Т.е. если я закрыл прогу, то хочется, чтобы при открытии, всё оставалось на месте. Дело в том, что разработка хорошей регулярки, может продлиться не один день. Я бы хотел, чтобы после закрытия проги, всё было на месте и после её открытия.

2. Размещение полей ввода и вывода результата, хотелось бы иметь не только в горизонтали, но и возможность переключиться на вертикальное расположение, часто это более удобно для тестов, а ещё более здорово, если поля будут, в открепляющихся окнах, сохраняющих свои расположения и размеры.

3. Возможнось расширить размеры поля для регулярки. Иногда это необходимо. Вообще, я считаю, что поле для регулярки, при разработке, не должно быть в одну строку, особенно, при включённом игнорировании пробелов.

4. Подсветка скобок в регулярке, либо не должна быть одинакового цвета для скобок, либо подсвечиваться так, как это делается обычно в подсветке кода, при клике рядом со скобкой.
Сейчас подсветка скобок никак не помогает и даже путает.

5. Моноширный шрифт в поле ввода более удобен. Это способствует более лучшему визуальному восприятию многострочных данных, синхронных вертикально.

Отредактировано Webarion (08.10.2023 06:59:48)

0

28

Обновление
Исправление - Происходит автоматическая прокрутка в начало, это нужно при вставке коротких регвыр после длинных.
Исправление накапливания пунктов меню. Теперь удаляются дубликаты при сохранении истории.

Webarion написал(а):

Моноширный шрифт

Добавил в ini-файле:
scifontsize = 12
fontsize = 11
scifont = Consolas
font = Arial

Давно как то смотрел прогу Rexman, но без исходников это как и любая другая утилита, но у неё есть плюс в логе токенов и подсветка найденного в результатах. Последнее не сложно сделать, получив позицию и длину найденного можно подсветить эти элементы.

Webarion написал(а):

3. Возможнось расширить размеры поля для регулярки

Пока добавил это в ini-файл sciheight=28 (от 20 до 300)

Webarion написал(а):

1. Сохранение всех полей и настроек.

На данный момент эту операцию выполняет кнопка "+" (Добавить). Там всего лишь нажать и Enter и все данные включая обрабатываемый текст сохранятся. И кроме этого в истории останутся промежуточные результаты регулярных выражений.

Webarion написал(а):

4. Подсветка скобок в регулярке, либо не должна быть одинакового цвета для скобок

Подсветка скобок выполняется урезанным движком регулярных выражений Scintilla,  я выжал из этого всё что мог. В предыдущей проги на AutoIt3, там другая концепция, регвыр крутится в регулярных выражениях вставляя спецсимволы RTF, полученную строку можно многократно обработать. Здесь же строка остаётся в неизменном виде. Скобки можно найти группами, но надо посимвольный разбор с проверкой что скобка не экранирована и не находится внутри квадратных скобок.

Отредактировано AZJIO (13.12.2023 15:52:26)

+1

29

Добавил раздельный размер шрифта для рег выр и для текстов. И скомпилировал для Linux.
scifontsize = 12
fontsize = 11

0

30

тоже вот думаю за регулярки засесть... но недавно дизмораль случилась :) в дизассемблере есть некоторые места, где надо приписывать к адресу какие-то плюсы. типа +2 к адресу. если раньше еще можно было подойти обычной регуляркой, так как ожидается к примеру
команда метка, параметр 2
то с математическими операциями внутри
команда  метка +2, параметр 2
делает это ваще тухлым делом :)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » RegExpPB