Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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
如何支持将这个正则表达式从JAVA转换为C#?_Java_C#_Regex - Fatal编程技术网

如何支持将这个正则表达式从JAVA转换为C#?

如何支持将这个正则表达式从JAVA转换为C#?,java,c#,regex,Java,C#,Regex,我用java制作了一个应用程序,现在需要将它转换成C#(UWP)。我需要转换以下正则表达式,但C#不支持所有格限定符,因此“+”部分会使正则表达式对象崩溃。(其余的看起来很好) 正则表达式:( 表达式是根据用户输入动态构建的 Parts: - {0}: exclude prefix - {1}: include prefix - {2}: include prefix - {3}: include expression (is the word to find) - {4}: in

我用java制作了一个应用程序,现在需要将它转换成C#(UWP)。我需要转换以下正则表达式,但C#不支持所有格限定符,因此“+”部分会使正则表达式对象崩溃。(其余的看起来很好)

正则表达式:

表达式是根据用户输入动态构建的

Parts: 
 - {0}: exclude prefix 
 - {1}: include prefix
 - {2}: include prefix
 - {3}: include expression (is the word to find)
 - {4}: include suffix
 - {5}: exclude suffix
具体例子:

如果您有建议,表达式可以更改,但需要给出相同的结果

注意:我尝试了
PCRE.NET Nuget
,但它似乎创建了另一个带有lookback表达式的问题(lookback断言在偏移量0处不是固定长度)


那么…有人能帮我吗?

您可以使用原子组:

(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)
输出:

-maison=>“maison”
-petite maison=>“petite maison”
-maison Blue=>“maison Blue”
-petite maison bleue=>“petite maison bleue”
-la maison=>“”
-maison ciel=>“”
-拉佩蒂·梅森=>“”
-maison bleue ciel=>“”
-拉佩蒂·梅森·布勒=>“”
-娇小的maison bleue ciel=>“”
-la maison Blue ciel=>“”
-拉佩蒂·梅森·希尔=>“”
-la maison ciel=>“”
-拉佩蒂·梅森·布卢埃·希尔=>“”

您可以尝试使用原子组或抑制回溯的原子组。例如,C语言中的
(?>\\w+)(\\d\\d)(\\w+)
与Java语言中的
(\\w++)(\\d\\d)(\\w+)(\\w+)
类似。@SGKoishi谢谢,它似乎起作用了:-)
Should match:
 - maison
 - petite maison
 - maison bleue
 - petite maison bleue

Should not match:
 - la maison
 - maison ciel
 - la petite maison
 - maison bleue ciel
 - la petite maison bleue
 - petite maison bleue ciel
 - la maison bleue ciel
 - la petite maison ciel
 - la maison ciel
 - la petite maison bleue ciel
(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)
var rx = @"(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)";
var strings = new List<String> {" - maison"," - petite maison"," - maison bleue",
        " - petite maison bleue"," - la maison"," - maison ciel"," - la petite maison",
        " - maison bleue ciel"," - la petite maison bleue"," - petite maison bleue ciel",
        " - la maison bleue ciel"," - la petite maison ciel"," - la maison ciel"," - la petite maison bleue ciel"};
foreach (var s in strings)
{
    Console.WriteLine("{0} => \"{1}\"", s, Regex.Match(s, rx)?.Value);
}