Regex F#:尝试使用block检查正则表达式模式是否有效
我是编程新手,F#是我的第一种.NET语言 作为一个初学者项目,我想创建一个regex查询工具,用于确定用户输入的regex模式是否有效。有人告诉我,我可以使用try-with块来查看regex模式是否可以编译,但由于我仍然非常不熟悉一般的编程,所以我很难使用,因为我不知道指定什么作为第二个参数Regex F#:尝试使用block检查正则表达式模式是否有效,regex,f#,Regex,F#,我是编程新手,F#是我的第一种.NET语言 作为一个初学者项目,我想创建一个regex查询工具,用于确定用户输入的regex模式是否有效。有人告诉我,我可以使用try-with块来查看regex模式是否可以编译,但由于我仍然非常不熟悉一般的编程,所以我很难使用,因为我不知道指定什么作为第二个参数 我在看正确的方法吗 有经验的程序员能告诉我如何编写一个函数来完成我刚才描述的任务吗 多谢各位 编辑:以下是我目前掌握的代码: open System open System.IO open System
open System
open System.IO
open System.Text.RegularExpressions
let askUserForFilePath() =
Console.WriteLine("Please enter the file (extension: .txt) from which to read all lines: ")
let filePath = Console.ReadLine()
filePath
let askUserForRegexPattern() =
Console.WriteLine("Please enter a regular expression: ")
let regExp = Console.ReadLine()
regExp
let getLinesFromFile (filePath: string) =
let linesFromFile = File.ReadAllLines filePath
linesFromFile
|> Array.reduce (+)
|> string
let matchTextAgainstRegex (text: string) (regExp: string) =
try
Regex.IsMatch(text, regExp)
with
if Regex.IsMatch(text, regExp) then
let matchResults = Regex.Match(text, regExp)
let stringsFound = []
for eachGroup in matchResults.Groups do
eachGroup.Value :: stringsFound |> ignore
stringsFound
|> List.rev
|> List.iter (fun eachString -> printfn "%s" eachString)
else
我的问题是不知道如何完成try with块。“else”块目前尚未完成,但我将稍后再处理。感谢您的帮助。实际上,您不必根据字符串测试正则表达式是否有效。我的意思是,如果您想检查模式是否有效(而不是字符串)。您可以简单地实例化一个新的
Regex
对象并捕获异常
type MatchResult =
| Ok
| Error of string
let matchTextAgainstRegex (regExp: string) (opt : RegexOptions) =
try
let r = Regex(regExp, opt);
Ok
with
| e -> Error(e.Message)
请注意,我引入了一个类型MatchResult
,因此当它从matchTextAgainstRegex
函数返回时,您可以对其进行匹配。我还对签名做了一点修改
因此,当您使用无效模式调用它时,输出如下:
matchTextAgainstRegex@“^[”RegexOptions.IgnoreCase
val it:MatchResult=错误“正在分析”^[“-未终止[]集。”
到目前为止你尝试了什么?为什么不起作用?你能提供一个答案吗?@MarkSeemann,我现在就用一个例子来编辑我的帖子。你读过你上一个问题的完整答案了吗(因为它被编辑了)?它似乎解决了你的问题problem@MY_G“我的问题是不知道如何完成try with块。”如果出现异常,您希望代码做什么?@JohnPalmer--谢谢您通知我。我错过了。我还建议将函数名称更改为类似
isRegexValid
,因为您不再需要文本来检查正则表达式。