/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i
Это соответствует:
- (+351) 282 43 50 50
- 90191919908
- 555-8909
- 001 6867684
- 001 6867684x1
- 1 (234) 567-8901
- 1-234-567-8901 x1234
- 1-234-567-8901 ext1234
- 1-234 567.89/01 ext.1234
- 1(234)5678901x1234
- (123)8575973
- (0055)(123)8575973
В $ n он сохраняет:
Вы можете проверить его на https://www.regexpal.com/?fam=99127
Чтобы напечатать строку, как она есть, без экранирования специальных символов, используйте:
putStr string
или
putStrLn string
, если вы хотите добавить новую строку в конце. В вашем случае вы, вероятно, ищете
putStr (displayFilm (....))
Почему это необходимо? В GHCi, если вы оцениваете выражение s
, результат будет напечатан, как если бы он выполнялся print s
(если у него нет типа IO something
- забудьте об этом специальном случае). Если e
является строкой, print
выводит все специальные символы и выводит результат. Это связано с тем, что print
предназначен для вывода строки, синтаксис которой соответствует выражению Haskell. Для чисел это обычное десятичное обозначение. Для строк мы получаем кавычки и экранированные символы.
Когда вы вводите выражение в GHC, он отображает его с помощью print
. Вызов print
в строке показывает его содержимое, но не оценивает escape-последовательности:
> print "line1\nline"
"line1\nline2"
Обратите внимание на кавычки.
Чтобы на самом деле распечатать строку, используйте putStr
или putStrLn
(последний добавит новую строку).
> putStr "line1\nline2"
line1
line2
putStr "aa\nbb"
. – chi 17 March 2015 в 01:13putStr
ничего не скрывает. Например. еслиstring
содержит строку новой строки, она печатается как строка новой строки, а не как символ` followed by
n. Instead,
print`, избегает специальных символов. – chi 7 March 2016 в 19:11