Слово проверить разобрать по составу: «Проверка» корень слова и разбор по составу

Состав

RegExp — 💡 Идеи

pygy

#1

Было бы полезно иметь возможность составлять регулярные выражения, не прибегая к склеиванию исходных строк. Это позволило бы создавать сложные синтаксические анализаторы из более простых, не думая о незахватываемых группах, и писать тесты для частей. Вместо полных выражений, используемых в строках шаблона, можно было бы что-то вроде /(?>id)/ , где id — это переменная JS.

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

  • Предложение «модификаторы» становится спорным, если в композиции учитываются флаги выражения, которое встраивается.

  • Операции над множествами могут быть реализованы как простой JS API, работающий с регулярными выражениями, использующими ровно одну кодовую точку.

Это позволит значительно сэкономить на синтаксисе.

Синтаксис RegExp уже громоздкий, он был изобретен для создания искателей только для записи в командной строке (сам построен на математической нотации, где подшаблоны были абстрагированы как однобуквенные переменные), и это видно. Сложные регулярные выражения — это кошмар для редактирования и обновления.

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

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

Вот пример сложного синтаксического анализатора на основе RegExp, а вот порт, использующий мою библиотеку compose-regexp. Мы надеемся, что преимущества в удобочитаемости очевидны и будут еще лучше при надлежащей синтаксической поддержке.

Редактировать: альтернативный синтаксис: /\e{js.expression}/ также может работать.

3 лайков

4 апреля 2022 г., 12:30

#2

В этой ветке было достаточно много обсуждений, связанных с этой идеей: RegExp: Комментарии

Одно из основных препятствий: как составить флаги регулярных выражений? Некоторые флаги вообще не складываются. Есть и другие флаги, но было бы неплохо, если бы вы могли создавать такие же регулярные выражения без компоновки, как если бы вы строили с композицией.

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

Например, вы можете сделать это для достижения композиции:

 const part1 = String.raw`\d{3}`
константная часть2 = String.raw`\d{4}`
const pattern1 = новое регулярное выражение (часть 1)
const pattern2 = новое регулярное выражение (часть 2)
conts completePattern = новое регулярное выражение (`(${part1}) ${part1)-${part2}`)
 

пиг

#3

Вы можете выдать

TypeError для флагов, которые не имеют смысла.

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

 константная часть1 = "а"
константная часть2 = "б"
const в сочетании1 = `${part1}-${part2}`
const в сочетании2 = `${part1}|${part2}`
const badStar1 = new RegExp(`${combined1}*`) // /a-b*/
const badStar2 = new RegExp(`${combined2}*`) // /a|b*/
const goodStar2 = new RegExp(`(?:${combined2})*`) // /(:a|b)*/
const badSequence = RegExp(`${combined1}${combined2}`) // /a-ba|b/
const goodSequence = RegExp(`${combined1}(?:${combined2})`) // /a-b(?:a|b)/
 

Теперь представьте, что вы установили часть 1 на "а|с" . Получайте удовольствие от отладки, если вы не были осторожны, добавляя NCG повсюду.

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

пиг

#4

@theScottyJam Я просмотрел предложение «комментарии регулярных выражений».

новый RegExp(RegExp.from источник , флаги) будет разумным решением.

@trusktr написал библиотеку, которая реализует эту идею: GitHub — trusktr/regexr: легко составлять регулярные выражения без необходимости двойного экранирования внутри строк. .. new RegExp(RegExp.from — много визуального шума. Подсветка синтаксиса также должна быть осведомлена о RegExp.from , тогда как /(?>id)/ можно было бы использовать из коробки ( и будет работать с регулярными выражениями, отличными от Юникода).0005

пиг

#5

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

RegExp .

Однако, если мы предоставим операции композиции и установки в виде JS API, удобочитаемость формата сериализации станет менее важной, и мы могли бы использовать его в реальном времени, например. внутри блока \op{} , так что правила экранирования в кодировках не нужно обновлять.

баккот

#6

Иногда это всплывает при обсуждении предложения RegExp.escape — некоторые делегаты настоятельно предпочитают иметь построитель тегов шаблона вместо метода RegExp.escape. (На самом деле это был один из основных вариантов использования тегов шаблонов, когда они добавлялись в язык в первую очередь.) Однако никто еще не выступил в защиту этого.

Пример такого билдера (уже совсем устаревшего с новыми фичами) —

GitHub

GitHub — mikesamuel/regexp-make-js: тег строкового шаблона ES6 для создания.

..

Тег шаблона строки ES6 для создания динамических регулярных выражений — GitHub — mikesamuel/regexp-make-js: Тег шаблона строки ES6 для создания динамических регулярных выражений

1 Нравится

Морикен

#7

Как насчет добавления нового синтаксиса RegExp Builder, такого как Swift, вместо того, чтобы основывать его на существующем литерале шаблона?

 пусть слово = OneOrMore(.word)
пусть emailPattern = регулярное выражение {
    Захватывать {
        ноль или больше {
            слово
            "."
        }
        слово
    }
    "@"
    Захватывать {
        слово
        Один или больше {
            "."
            слово
        }
    }
}
 

https://developer.apple.com/documentation/RegexBuilder

github. com
apple/swift-evolution/blob/8711a202af97640eaa0ee040502a365d8b9430c2/proposals/0351-regex-builder.md
 # DSL построителя регулярных выражений
* Предложение: [SE-0351](0351-regex-builder.md)
* Авторы: [Ричард Вей] (https://github.com/rxwei), [Майкл Ильсман] (https://github.com/milseman), [Нейт Кук] (https://github.com/natecook1000) , [Алехандро Алонсо] (https://github.com/azoy)
* Менеджер по обзору: [Бен Коэн] (https://github.com/airspeedswift)
* Реализация: [apple/swift-experimental-string-processing](https://github.com/apple/swift-experimental-string-processing/tree/main/Sources/RegexBuilder)
  * Доступно в ночных снимках цепочки инструментов с помощью `import _StringProcessing`
* Статус: **Принято**
* Обзор: ([шаг](https://forums.swift.org/t/pitch-regex-builder-dsl/56007))
   ([первый обзор](https://forums.swift.org/t/se-0351-regex-builder-dsl/56531))
       ([редакция](https://forums.swift.org/t/returned-for-revision-se-0351-regex-builder-dsl/57224))
  ([второй обзор](https://forums.
swift.org/t/se-0351-second-review-regex-builder-dsl/58721)) ([принятие](https://forums.swift.org/t/accepted-se-0351-regex-builder-dsl/58972)) **Оглавление** - [DSL построителя регулярных выражений](#regex-builder-dsl) - [Введение](#введение) - [Мотивация](#мотивация) - [Предлагаемое решение](#предлагаемое-решение) - [Детальный дизайн](#detailed-design)
Этот файл был усечен. показать оригинал

java — SQLite получает список объектов, которые используют композицию из 3 таблиц

спросил

6 лет, 2 месяца назад

Изменено 6 лет, 2 месяца назад

Просмотрено 169 раз

В моей базе данных sqlite есть три таблицы.

 Категории: category_id, название
Слова: слово_идентификатор, заголовок, принадлежит_к (внешний ключ, категория_идентификатор)
WordImgs: wordImg_id, заголовок, created_to (внешний ключ,word_id)
 

Я пытаюсь реализовать метод List getAllCategories. Каждая категория содержит список слов, а каждое слово содержит список изображений слов.

Я использовал это для объединения таблиц, но поскольку есть несколько значений, связанных с отдельными значениями, я получаю дубликаты.

 ВЫБЕРИТЕ категории.название, слова.название, формулировки.название
ИЗ категорий
ПРИСОЕДИНЯЙТЕ слова к category.id = words.belongs_to
ПРИСОЕДИНЯЙТЕСЬ wordImgs words.id = WordImgs.belongs_to
 

Пример. Этот оператор может вернуть

 Category,Word,wordImg
_______________
Собака Собака Собака1
Собака Животные Собака2
животное кошка кошка1
 

Как я могу перемещать свой курсор, чтобы я делал только 1 из каждой отдельной категории и слова для моего списка?

РЕДАКТИРОВАТЬ: Рассмотрено использование трех вложенных курсоров. Не видел много этого в Интернете, есть ли лучшая альтернатива?

  • Java
  • Android
  • MySQL
  • sqlite

3

попробуйте с этим запросом

 SELECT
категории.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *