«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сопоставить повторяющиеся символы в Go без обратных ссылок?

Как сопоставить повторяющиеся символы в Go без обратных ссылок?

Опубликовано 19 ноября 2024 г.
Просматривать:488

How to Match Repeating Characters in Go Without Backreferences?

Как сопоставить любой повторяющийся символ с помощью регулярных выражений в Go?

В этой статье мы рассмотрим задачу сопоставления любого символа, который повторяется дважды с использованием регулярных выражений в Go. Эта задача часто проста в других синтаксисах регулярных выражений, таких как JavaScript, где можно просто использовать обратную ссылку для сопоставления повторяющихся символов. Однако собственный механизм регулярных выражений Go (re2) не поддерживает обратные ссылки.

Невозможно использовать обратную ссылку в re2 Go

Приведенный пример JavaScript использует обратную ссылку для захвата повторяющиеся символы:

var str = "abccdeff";
var r = /([a-z]{1})\1/g
console.log(str.match(r))

Этот шаблон не будет работать в Go re2 из-за отсутствия поддержки обратных ссылок.

Альтернативы Go re2

Чтобы устранить это ограничение, рассмотрите следующие альтернативы:

  • Используйте совместимую библиотеку регулярных выражений: Такие библиотеки, как glenn-brown/golang-pkg-pcre, предлагают расширенные функции, в том числе обратная ссылка и совместимы с синтаксисом Go.
  • Реализуйте собственный цикл: Разработайте решение на основе цикла, которое вручную анализирует символы на предмет повторения, не полагаясь на регулярное выражение.

Пример пользовательского решения цикла

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abccdeff"

    // Find and print repeating characters without using regex
    for i, ch := range str {
        if i 1 
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3