Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无法转换正则表达式_Regex_Boost - Fatal编程技术网

Regex 无法转换正则表达式

Regex 无法转换正则表达式,regex,boost,Regex,Boost,此正则表达式: "REGION\\((.*?)\\)(.*?)END_REGION\\((.*?)\\)" 当前找到此信息: REGION(Test) my user typed this END_REGION(Test) #region REGION my user typed this #endregion END_REGION 我需要它来查找以下信息: REGION(Test) my user typed this END_REGION(Test) #region REGIO

此正则表达式:

"REGION\\((.*?)\\)(.*?)END_REGION\\((.*?)\\)"
当前找到此信息:

REGION(Test) my user typed this

END_REGION(Test)
#region REGION my user typed this

#endregion END_REGION
我需要它来查找以下信息:

REGION(Test) my user typed this

END_REGION(Test)
#region REGION my user typed this

#endregion END_REGION
我试过:

"#region\\ (.*?)\\\n(.*?)#endregion\\ (.*?)\\\n"

它告诉我模式分配失败了。有人能解释一下我做错了什么吗?我不熟悉正则表达式。

问题似乎在于多行
\n
。我的建议是使用修饰符
s
,以避免多行复杂性,如:

/#region\ \(.*?\)(.*?)\s#endregion\s\(.*?\)/s

  • s
    修饰符“单行”使
    匹配所有字符,包括换行符

问题似乎在于多行
\n
。我的建议是使用修饰符
s
,以避免多行复杂性,如:

/#region\ \(.*?\)(.*?)\s#endregion\s\(.*?\)/s

  • s
    修饰符“单行”使
    匹配所有字符,包括换行符
试试这个:

#region(.*)?\n(.*)?#endregion(.*)?
在这里测试时,这对我很有用:

当使用原始文本和正则表达式时,唯一的问题是结尾没有新行,因为示例文本没有新行。

试试这个:

#region(.*)?\n(.*)?#endregion(.*)?
在这里测试时,这对我很有用:


当使用原始文本和正则表达式时,唯一的问题是,我没有在末尾添加新行,因为示例文本没有新行。

使用boost构建此正则表达式不会失败,即使使用扩展的修饰符

将字符串添加到编译器:

"#region\\ (.*?)\\\n(.*?)#endregion\\ (.*?)\\\n"
#region\ (.*?)\\n(.*?)#endregion\ (.*?)\\n  
编译器解析后:

"#region\\ (.*?)\\\n(.*?)#endregion\\ (.*?)\\\n"
#region\ (.*?)\\n(.*?)#endregion\ (.*?)\\n  
看来你在新线上越狱的次数太多了

如果将正则表达式表示为扩展为boost,则未转义的磅符号
将被解释为注释。
在这种情况下,你需要避开英镑符号

\#region\ (.*?)\\n(.*?)\#endregion\ (.*?)\\n  
如果不使用展开的修改器,则不需要转义空格字符。
采用该大头钉,您可以移除空间上的转义,并修复换行转义,它看起来像是原始的(传递给正则表达式引擎的内容):

并将其作为源代码字符串:

"#region (.*?)\\n(.*?)#endregion (.*?)\\n"

使用boost构造这个正则表达式不会失败,即使使用扩展的修饰符也是如此

将字符串添加到编译器:

"#region\\ (.*?)\\\n(.*?)#endregion\\ (.*?)\\\n"
#region\ (.*?)\\n(.*?)#endregion\ (.*?)\\n  
编译器解析后:

"#region\\ (.*?)\\\n(.*?)#endregion\\ (.*?)\\\n"
#region\ (.*?)\\n(.*?)#endregion\ (.*?)\\n  
看来你在新线上越狱的次数太多了

如果将正则表达式表示为扩展为boost,则未转义的磅符号
将被解释为注释。
在这种情况下,你需要避开英镑符号

\#region\ (.*?)\\n(.*?)\#endregion\ (.*?)\\n  
如果不使用展开的修改器,则不需要转义空格字符。
采用该大头钉,您可以移除空间上的转义,并修复换行转义,它看起来像是原始的(传递给正则表达式引擎的内容):

并将其作为源代码字符串:

"#region (.*?)\\n(.*?)#endregion (.*?)\\n"

在转义换行符序列时,正则表达式有一个额外的反斜杠
\\\n
,请改用
\\s*
。另外,对于最后一个捕获组,您可以使用贪婪量词代替,并删除换行符序列

#region\\ (.*?)\\s*(.*?)#endregion\\ (.*)

在转义换行符序列时,正则表达式有一个额外的反斜杠
\\\n
,请改用
\\s*
。另外,对于最后一个捕获组,您可以使用贪婪量词代替,并删除换行符序列

#region\\ (.*?)\\s*(.*?)#endregion\\ (.*)

你在用什么语言?你在用什么语言?