#include <MsgBoxConstants.au3> ; to declare the Constants of MsgBox
Local $sRegex = "(?xm)(?: # 采用非捕获括号进行分组(非必要不使用捕获型括号)" & @CRLF & _
" (`{3,}) # 捕获组,匹配三个及以上反引号,并进行捕获" & @CRLF & _
" [\s\S]*? # 采用非贪婪匹配(必须),匹配0到n次空白或非空白字符(任意字符)" & @CRLF & _
" (?:(?:\1`*)|\Z) # 引用,引用了之前的捕获组,若之前捕获了5个反引号,则在此必须匹配5个以上反引号,若开头三个以上反引号,后面没有比开头更多的反引号,则后面都是代码块" & @CRLF & _
") # 结束第一个分支" & @CRLF & _
"| # 或符号" & @CRLF & _
"(?: # 同上,采用非捕获型括号" & @CRLF & _
" (~{3,}) # 同上,匹配三个及以上波浪号并进行捕获" & @CRLF & _
" [\s\S]*? # 同上,非贪婪匹配来匹配0到n次空白或非空白字符" & @CRLF & _
" (?:(?:\2~*)|\Z) # 引用,引用了之前的捕获组" & @CRLF & _
") # 结束第二个分支" & @CRLF & _
"| # 或符号" & @CRLF & _
"(?: # 同上,采用非捕获型括号" & @CRLF & _
" (?<= # 肯定型逆序环视,左侧文本必须满足条件才可以匹配" & @CRLF & _
" (?:^\n)|(?:^\A) # 上一行必须只有一个回车(以回车符号开头)或没有上一行" & @CRLF & _
" ) # 结束环视" & @CRLF & _
" (?: # 采用非捕获型括号分组" & @CRLF & _
" (?:\s{4,}?|\t+?)[^\n]*(?:\n|$) # 匹配四个及以上空格或一个以上制表符开启的一行" & @CRLF & _
" )+ # 上面的子组匹配1次到n次" & @CRLF & _
") # 结束第三个分支"
Local $sString = " this is a code block" & @CRLF & _
" " & @CRLF & _
"// 1. 匹配四个空格导出的代码块" & @CRLF & _
"" & @CRLF & _
" functino(asfd)" & @CRLF & _
" safdsadf" & @CRLF & _
" safsadf" & @CRLF & _
" safdsdaf" & @CRLF & _
" " & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"// 2. 匹配三个反引号所引出的代码块" & @CRLF & _
"```" & @CRLF & _
" func function(){" & @CRLF & _
" }" & @CRLF & _
"```" & @CRLF & _
"" & @CRLF & _
"这里是一些文本" & @CRLF & _
"……" & @CRLF & _
"………………" & @CRLF & _
"" & @CRLF & _
"``` python" & @CRLF & _
" print("hello")" & @CRLF & _
"```" & @CRLF & _
"" & @CRLF & _
"// 3.如果四个空格之前的一行不是回车独占一行,则不会导出代码块(符合Markdown约定)" & @CRLF & _
" function(asfd)" & @CRLF & _
" safdsadf" & @CRLF & _
" safsadf" & @CRLF & _
" safdsdaf" & @CRLF & _
" safd" & @CRLF & _
" " & @CRLF & _
"" & @CRLF & _
"// 4. 匹配三个波浪号导出的代码块" & @CRLF & _
"" & @CRLF & _
"~~~" & @CRLF & _
" fmt.println(123)" & @CRLF & _
"~~~" & @CRLF & _
"" & @CRLF & _
"// 5. 匹配前后四个及以上反引号导出的代码块" & @CRLF & _
"````" & @CRLF & _
"aaa" & @CRLF & _
"```" & @CRLF & _
"````" & @CRLF & _
"" & @CRLF & _
"这里是一些文本……" & @CRLF & _
"" & @CRLF & _
"`````" & @CRLF & _
" print("this is a code block")" & @CRLF & _
"`````" & @CRLF & _
"" & @CRLF & _
"`````" & @CRLF & _
" print("this is a code block")" & @CRLF & _
"````````````````````````" & @CRLF & _
"// 6. 匹配前后四个及以上波浪号导出的代码块" & @CRLF & _
"~~~~" & @CRLF & _
"aaa" & @CRLF & _
"~~~" & @CRLF & _
"~~~~" & @CRLF & _
"" & @CRLF & _
"这里是一些文本……" & @CRLF & _
"" & @CRLF & _
"~~~~~~" & @CRLF & _
" print("this is a code block")" & @CRLF & _
"~~~~~~" & @CRLF & _
"" & @CRLF & _
"~~~~~~" & @CRLF & _
" print("this is a code block")" & @CRLF & _
"~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF & _
"" & @CRLF & _
"// 7. 只有开头,没有结尾的,都算代码块" & @CRLF & _
"```" & @CRLF & _
"asdfasdf" & @CRLF & _
"asdfasdf" & @CRLF & _
"asdfasdf" & @CRLF & _
"asdfasdf" & @CRLF & _
"asdfasdf" & @CRLF & _
"asdf" & @CRLF & _
"没有结尾,这里也算代码块"
Local $sSubst = ""
Local $sResult = StringRegExpReplace($sString, $sRegex, $sSubst)
MsgBox($MB_SYSTEMMODAL, "Result", $sResult)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm