正则表达式规则定义为
正则表达式匹配应覆盖整个输入字符串 例如
我无法理解eg.3。
怎么可能是PaternPresent(“zk”,'。*')→是真的吗?
以下是我的想法:
那怎么可以
ZK
与
匹配*
是真的
答案 0 :(得分:2)
尝试使用regex101.com
根据这个
。*匹配任何字符(换行符除外)量词:*在零之间 无限次,尽可能多次,根据需要回馈 [贪婪]
*正在重复不重复匹配的规则
答案 1 :(得分:1)
*
是关联的!因此,*
将在其之前采用任何表达式并应用seen zero or more times
规则。在您的情况下,它会将规则应用于.
,这意味着任何字符,零次或多次。'如果您有[01]*
,则表示“0”或“1”,零次或多次“
答案 2 :(得分:0)
我在C#面试中被问到一个类似的问题(但对于单字符外卡,使用'?'而不是'。')。它困扰了我好几天,但我终于认为我发现了一些有用的东西。如果您发现任何错误,请随意转换为java,压力测试和评论。
public static bool IsPhraseValid(string regex, string phrase)
{
if (regex.Length == 0 && phrase.Length == 0)
{
return true;
}
while(regex.Replace("**","*") != regex)
{
regex = regex.Replace("**", "*");
}
while (regex != phrase)
{
if (regex[0] == phrase[0] || regex[0] == '?')
{
if (regex.Length > 1 && phrase.Length > 1)
{
return IsPhraseValid(regex.Substring(1), phrase.Substring(1));
}
else
{
return regex.Length == phrase.Length;
}
}
else if (regex[0] == '*')
{
if (regex.Length > 1)
{
for (int i = 0; i < phrase.Length; i++)
{
if ((phrase[i] == regex[1] || regex[1] == '?') && IsPhraseValid(phrase.Substring(0,i) + regex.Substring(1), phrase))
{
return true;
}
}
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
return true;
}