LINUX.ORG.RU

Помогите с регуляркой

 ,


0

2

Всем привет! Помогите, плиз, с регуляркой.

package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile("{.*}")
	ra := regexp.MustCompile("\\[.*\\]")
	fmt.Println(re.FindString("{food} zxcvb {qwerty}"))
	fmt.Println(ra.FindString("[food] sdadasds [qwerty]"))
}

Нужно взять только то, что в скобках. Но почему-то находится вся строка.

https://play.golang.org/p/vXW6SFK5O3s

★★★★

Последнее исправление: dnb (всего исправлений: 1)

Но почему-то находится вся строка.

	re := regexp.MustCompile("{.*?}")
	ra := regexp.MustCompile("\\[.*?\\]")

А вторым вопросом будет - как найти содержимое вторых скобок?

Deleted
()

«{food} zxcvb {qwerty}»
Нужно взять только то, что в скобках. Но почему-то находится вся строка.

Все правильно, вся строка находится внутри скобок.

{ все, что угодно, включая открывающие  { и закрывающие } скобки находятся внутри скобок }
Может быть, это ты не можешь правильно поставить задачу?

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

anonymous
()
Ответ на: комментарий от dnb

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

anonymous
()
Ответ на: комментарий от dnb

В последнем примере ты наверное хотел сделать так:

re := regexp.MustCompile(`\{[a-zA-Z]*\}`)

Как искать случайное количество пар скобок, я не знаю.

Deleted
()

в javascript-е это такой регексп: /(?<=\{).+?(?=\})/g

получишь массив со словами в фигурных скобках.

для квадратых скобок соответственно /(?<=\[).+?(?=\])/g

PatrickKilpatrick
()

Это называется «документацию не читай, сразу пиши на форум» :)

package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`\{[A-Za-z0-9]*\}`)
	s := "{tag1} SomeText {tag2}"
	fmt.Println(re.FindAllString(s,-1))
}

dnb ★★★★
() автор топика

Вот пример с перлом: (это не важно, на каком языке)

my $str = '{food} fvasva {qwerqweqr}';
my $str1 = '[food] fvasva [qwerqweqr]';
my @xx = $str =~ /{([^}]*)}/g;

# Ниже - для квадратных скобок
# my @yy = $str1 =~ /\[([^]]*)\]/g;

@xx = список того, что в фигурных скобках

В перле /g указывает, что искать все совпадения. В go подозреваю, должен получаться enumerated объект, который можно в цикле опрашивать.

solom
()
Последнее исправление: solom (всего исправлений: 1)
Ответ на: комментарий от solom

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

anonymous
()
Ответ на: комментарий от anonymous

У него есть некоторые расширения, они, как я понимаю, в pcre. Этот пример - очень простой.

solom
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.