Документация MSDN для regex мне не так понятна.
Для простого случая соответствия строки регулярному выражению это не может быть проще:
open System.Text.RegularExpressions
let r = Regex("^a*$")
r.IsMatch("a")
> val it : bool = true
r.IsMatch("b")
> val it : bool = false
Замените a*
на требуемое регулярное выражение.Обратите внимание, что вам нужно ^
и $
вокруг регулярного выражения для полного соответствия.
Я был немного разочарован, обнаружив, что это не сработало.
match str with
| a + "." + b + "." + c -> Some(a,b,c)
| [] -> None
Шаблоны F # предназначены для сопоставления и связывания частей вложенных древовидных структур данных (алгебраических типов данных), а не для строк и обычных языков, поэтому это не работает.
IПодозреваю, что подобного эффекта можно достичь с помощью активных паттернов
Да, вы можете пройти долгий путь к достижению этого эффекта, используя активные паттерны.У Криса Смита есть статья, показывающая подробности (как впервые опубликовано Брайаном).
http://blogs.msdn.com/b/chrsmith/archive/2008/02/22/regular-expressions-via-active-patterns.aspx
Я хотел бы знать, как выполнять регулярные выражения или контекстно-свободные грамматики или оба... Я сделал несколько регулярных выражений в Python, а также регулярные выражения и грамматики с точки зрения дискретной математики.
Для сопоставления шаблонов в строках обычно используются встроенные регулярные выражения .Net, как показано выше.достаточно хорошо.Однако имейте в виду, что, несмотря на название, они не являются строго регулярными, поскольку они могут представлять больший класс языков.Как следствие, они могут не всегда иметь временную / пространственную сложность, которую вы могли бы ожидать, если бы вы использовали их в теоретических условиях.(Это также верно для Perl / Python / и т. Д.)
Что касается CFG, это совершенно другой вопрос.Fsyacc (вместе с лексером fslex) из F # PowerPack - это стандартный генератор синтаксических анализаторов F # LALR, который будет соответствовать полезному подклассу CFG.В качестве альтернативы вы можете попробовать библиотеку комбинатора синтаксического анализатора FParsec из http://www.quanttec.com/fparsec/.