LINUX.ORG.RU

regex для букв (golang)

 ,


0

1

Искал и не нашёл регэксп, к-рый матчит буквы (в т.ч. неанглийские) и пробелы, но не что-то остальное. SO думает вот это, https://stackoverflow.com/questions/3009993/regex-what-would-be-regex-for-mat... , но там прямого и готового ответа нет. Правильно ли так?

^[a-zA-Z\p{L} ]+$

Соответственно, вот код на голанге:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	regex := `^[a-zA-Z\p{L} ]+$`
	fmt.Println(regex)
	matched, err := regexp.Match(regex, []byte(`ЯРeéèêë世界`))
	fmt.Println(matched, err)

}
Проверено, что
Не матчатся.

★★★★★

[~] $ echo 'DSFsdfsdf@#@#4f sdf  выа ыва ываываВЫАЖДвоы ава 123 13Жжваыж :;; sd["" ыва 23 0pef9d8_)(*&*(&@32' | egrep -o '[[:alpha:] ]' | tr '\n' ' '
D S F s d f s d f f   s d f     в ы а   ы в а   ы в а ы в а В Ы А Ж Д в о ы   а в а     Ж ж в а ы ж     s d   ы в а     p e f d
Yorween ()
Ответ на: комментарий от RazrFalcon

Про то, что w содержит не только буквы, ты не знал, ламерюга?

anonymous ()
Ответ на: комментарий от den73
echo 'D^$SFsdfsdf@#@#4f^^^ sdf  выа ыва ываываВЫАЖДвоы ава$$$ 123 13Жжваыж :;; sd["" ыва 23 0pef9d8_)(*&*(&@32' | egrep -o '[[:alpha:] ]' | tr '\n' ' '
D S F s d f s d f f   s d f     в ы а   ы в а   ы в а ы в а В Ы А Ж Д в о ы   а в а     Ж ж в а ы ж     s d   ы в а     p e f d
Yorween ()

Попробуй от противного: [^\W0-9_]

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

Вопрос такой: не затруднит ли тебя дочитать до конца первое предложение в посте?

Искал и не нашёл регэксп, к-рый матчит буквы (в т.ч. неанглийские) и пробелы, но не что-то остальное.

Ну и? Мой пример матчит буквы и пробелы, но не все остальное.

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

Попробуй на не-ASCII символах - в некоторых реализациях regex даже [A-Z] не только с латиницей совпадает(не баг). Может сработает

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

некоторых реализациях regex даже [A-Z] не только с латиницей совпадает(не баг).

Нет, в голанге не работает.

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

Вариантов, собственно, два:

  • неверная установка локали
  • golang за пределы ASCII вообще не вылазеет(по крайней мере по линку выше даже намёка не видно)

Ставлю на первый вариант, ибо даже в tcl регулярки работают годно

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

Спасибо, понял. Судя по ману, это в текущей локале. Буду знать, но мне надо в голанг, на самом деле надо сузить тему. Если интересно, попробуй иероглиф из поста.

den73 ★★★★★ ()
Ответ на: комментарий от Deleted

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

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

Но мне не локаль, а все языки

Совпадение/несовпадение зависит от локали(например, «Й» не является буквой в английской локали):

$ echo 'й' | LANG=C.UTF8 grep '[[:alpha:]]' 
$ echo 'й' | LANG=ru_RU.UTF8 grep '[[:alpha:]]' 
й
Так что скорее всего в этом дело(не верится, что golang-овские регулярки настолько убоги). Выражение из ОП возможно заработает при верных настройках. Насчёт всех языков - вот здесь не скажу, обычно mainline таков, что пользователь сообщает о своих предпочтениях, и от этого уже пляшет всё остальное

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

Как насчёт моего регэкспа, похож на правду

Только если \p{L} гарантирует, что там будут точно буквы, а кракозябла или цветная какашка не пролезут. Насколько я помню, это ненадежная фигня, и полагаться можно только на ascii letters. Еще можно тупо забить все разрешенные тобой символы в регексп. Зачем вот тебе иероглифы?

anonymous ()
Ответ на: комментарий от den73
echo 'ЯРeéèêë ふりがなDfljsf;в ВАываыва %!@&#^(*)@!#&):;;;+_+- ' | grep -o '[[:alnum:] ]' | tr -d '\n'
ЯРeéèêë ふりがなDfljsfв ВАываыва 

Я не нашел из какой локали твой символы, но нашел какие-то другие.

Они откуда-то отсюда

  en_US.UTF-8... done
  ja_JP.EUC-JP... done
  ja_JP.UTF-8... done
  ru_RU.UTF-8... done
  zh_CN.GB18030... done
  zh_CN.GBK... done
  zh_CN.UTF-8... done
  zh_CN.GB2312... done
  zh_HK.UTF-8... done
  zh_HK.BIG5-HKSCS... done
  zh_SG.UTF-8... done
  zh_SG.GBK... done
  zh_SG.GB2312... done
  zh_TW.EUC-TW... done
  zh_TW.UTF-8... done
  zh_TW.BIG5... done
  zu_ZA.UTF-8... done
  zu_ZA.ISO-8859-1... done
Yorween ()
Ответ на: комментарий от anonymous

когда дело касается какашик то имха лучше ужэ цветная чем ванючая

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

Отлично, теперь мы это знаем. Но в голанге оно не работает. Всё равно спасибо!

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

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

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

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

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

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

А что за язык квантовых осей?

den73 ★★★★★ ()
Ответ на: комментарий от Deleted

Да мне просто надо что-то сделать на голанге, чтобы показать, что я его знаю. Заодно и узнал по ходу дела.

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

ИМХО, с иероглифами у вас будет напряжённо, в китайском, ЕМНИП, для цифр свои иероглифы, куда их будет матчить ваша регулярка?

mky ★★★★★ ()

Норкоман.

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

Немного заглянул. Теперь буду переваривать, зачем это может понадобиться. Может быть, если бы дочитал до конца, было бы понятно.

den73 ★★★★★ ()
Ответ на: комментарий от mky

Ну, для начала хотя бы «буквы вообще» в первом приближении, и чтобы туда никакой скрипт не пролез для «инъекции». Ладно, пока будет так, а там поглядим. Всё равно это всё для показухи пока что делается, не факт, что будет какой-то реальный проект. Похоже, что в реальности нужно действительно использовать отдельную локаль или отдельный регэксп для каждого языка.

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

При чем тут regex? Кто-то хочет неведомую для себя хрень (зато красиво звучит в резюме) прикрутить к чему-нибудь?

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