匹配 0 次或多次出现的正则表达式不起作用

nid*_*ndo 1 c# regex

这个问题可能听起来很愚蠢。但是我尝试了几种选择,但都没有奏效。

我在字符串变量中有以下内容。

string myText="*someText*someAnotherText*";
Run Code Online (Sandbox Code Playgroud)

我上面的意思是,“someText”之前可以有 0 个或多个字符。在“someText”之后和“someAnotherText”之前可以有 0 个或多个字符。最后,在“someAnotherText”之前可以有 0 次或多次出现任何字符。

我尝试了以下方法。

string res= Regex.Replace(searchFor.ToLower(), "*", @"\S*");
Run Code Online (Sandbox Code Playgroud)

它没有用。然后我尝试了以下方法。

string res= Regex.Replace(searchFor.ToLower(), "*", @"\*");
Run Code Online (Sandbox Code Playgroud)

即使那样也行不通。

有人可以帮忙吗?尽管我已经提到“*”来表示出现 0 次或多次,但它表示我没有提到出现次数。

Cor*_*rey 6

与 DOS 通配符不同,*正则表达式中的字符意味着重复前一项(字符、组等)0 次或更多次。 在您的正则表达式中,第一个*没有前面的字符,第二个在t字符后面,因此将重复任意次数。

要获得“0或多个任意字符”你需要使用的组成.*哪里.是“任何字符”和*“0次以上”。

换句话说,要搜索someText后面的任意数量的字符,someAnotherText您将使用以下正则表达式:

var re = new Regex(@"someText.*someAnotherText");
Run Code Online (Sandbox Code Playgroud)

请注意,除非您通过将开始/结束说明符放入(^用于字符串的开始,$用于结束)来另外指定,否则正则表达式将匹配测试字符串的任何子字符串。

上面的测试,都返回真:

re.IsMatch("This is someText, followed by someAnotherText with text after.");
re.IsMatch("someTextsomeAnotherText");
re.IsMatch("start:someTextsomAnotherText:end");
Run Code Online (Sandbox Code Playgroud)

等等。

在正则表达式中*是一个量词。其他量词是:

?     Match 0 or 1
+     Match 1 or more
{n}   Match 'n' times
{n,}  Match at least 'n' times
{n,m} Match 'n' to 'm' times
Run Code Online (Sandbox Code Playgroud)

所有这些都适用于 Regex 中的前一项。

将 a放在?另一个量词(包括?)之后会将其转换为惰性形式,在这种形式中它将匹配尽可能少的项目。这将允许以下条款也与您指定的条款相匹配。