.NETにWindows API関数PathMatchSpec()
と同等の機能があるかどうかは知りませんか?PathMatchSpec for .NETに相当する
答えて
正規表現を使用して機能を取得できない場合は、PInvokeでPathMatchSpec()を使用するとどうなりますか?
http://www.pinvoke.net/default.aspx/shlwapi/PathMatchSpec.html
あなたは How to implement glob in C# を試すことができたり、必要であれば、もちろんPInvoke routeがあります。私は.NETに内蔵された方法を認識していないよ
は、しかし、それは正規表現で複製する些細です:
public static bool PathMatchSpec(String path, String spec)
{
String specAsRegex = Regex.Escape(spec).Replace("\\*", ".*").Replace("\\?", ".") + "$";
return Regex.IsMatch(path, specAsRegex);
}
明らかにこれはSystem.Text.RegularExpressions名前空間が参照されている前提としています。あなたが同じ仕様でこれをやろうとすれば、Regexもキャッシュすることができます。
編集に追加:P/Invokeは確かにオプションですが、PathMatchSpecのシグネチャではANSI文字列が使用されることを示しているため、呼び出しごとに文字セット変換が発生します。あなたがそのルートに行くなら、それを覚えておいてください。その場合、おそらくPathMatchSpecExが好ましいでしょう。要するに
...私の知っている...しかし、多分、これは(ビットあなたが望むかもしれないよりより長いが、それはうまく私を務めているノート)に沿ってあなたを助けることができないという。
sealed public class WildcardMatch
{
private static Regex wildcardFinder = new Regex(@"(?<wildcards>\?+|\*+)", RegexOptions.Compiled | RegexOptions.Singleline);
private Regex wildcardRegex;
public WildcardMatch(string wildcardFormat) : this(wildcardFormat, false) { }
public WildcardMatch(string wildcardFormat, bool ignoreCase)
{
if (wildcardFormat == null)
throw new ArgumentNullException("wildcardFormat");
StringBuilder patternBuilder = new StringBuilder("^");
MatchCollection matches = this.wildcardFinder.Matches(wildcardFormat);
string[] split = this.wildcardFinder.Split(wildcardFormat);
for (int ix = 0; ix < split.Length; ix++)
{
// Even indexes are literal text, odd indexes correspond to matches
if (ix % 2 == 0)
patternBuilder.Append(Regex.Escape(split[ix]));
else
{
// Matches must be substituted with Regex control characters
string wildcards = matches[ix/2].Groups["wildcards"].Value;
if (wildcards.StartsWith("*", StringComparison.Ordinal))
patternBuilder.Append("(.*)");
else
patternBuilder.AppendFormat(CultureInfo.InvariantCulture, "({0})", wildcards.Replace('?', '.'));
}
}
patternBuilder.Append("$");
this.wildcardRegex = new Regex(
patternBuilder.ToString(),
RegexOptions.Singleline | (ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None));
}
public bool IsMatch(string value)
{
if (value == null)
return false;
return this.wildcardRegex.IsMatch(value);
}
public IEnumerable<string> ExtractMatches(string value)
{
if (value == null)
yield break;
Match match = this.wildcardRegex.Match(value);
if (!match.Success)
yield break;
for (int ix = 1; ix < match.Groups.Count; ix++)
yield return match.Groups[ix].Value;
}
}
anelsonsのRegex.Escape()を使うことによって、エスケープコードを間違いなく簡単にすることができます。 – jerryjvl
- 1. MappedBytesBuffer for .NETに相当しますか?
- 2. .NETに相当するjava.awt.color.ColorSpace
- 3. JObject.SelectToken .NETに相当する
- 4. AngularJS for jQueryに相当するSidr.js
- 5. Javascriptに相当するApex For
- 6. Pythonで.NET DataSetに相当する
- 7. .NETのTask.DelayのC++に相当する?
- 8. .NetでSAXに相当する
- 9. FactoryGirl/machinistに相当するC#/ .Net
- 10. .NETのVersionクラスに相当するJava?
- 11. .NET TransactionScopeOption.Suppressに相当するT-SQL
- 12. .NET標準でGetMethodに相当する
- 13. .net-core:ILDASM/ILASMに相当する
- 14. .NETのDateTime.Parseに相当するJavascript
- 15. .NETソケットに相当するDataWriter.WriteUInt32?
- 16. PHP time()に相当するC#.NET
- 17. .NETのEnvironment.NewLineに相当するR
- 18. .NETのColorBlendに相当するJava
- 19. JavaScript相当のRegExp for PHP
- 20. .NETはGetLastInputInfoに相当しますか?
- 21. .NETのGWTに相当しますか?
- 22. .NET内のjava.net.URLConnectionに相当します。
- 23. .Net、asp Global.asa相当のファイル
- 24. PHP相当の.Net Entity Framework
- 25. ASP.NETのポリシーに相当MVC for MVC 5
- 26. Linux Mono .NET Windowsサービスに相当。
- 27. .NETにPath.PathSeparatorに相当するURIがありますか?
- 28. SoapExtension for JSON WebMethodに相当するものは何ですか?
- 29. JavaのTreeSetに相当するC#.netに
- 30. Echo Web framework for Railsに相当するのは?
クール...自分でEscape()メソッドを知らなかった。 )私の解決策の一部を間違いなく簡素化するでしょう; – jerryjvl