我有一个复杂的正则表达式,用于帮助从用户输入中删除 HTML。我知道 .NET 在某种程度上缓存了静态正则表达式调用,但是这个调用很大并且经常使用,所以我希望它能保留下来。
在网站项目中,我想将其定义为共享对象,在 App_Code 的辅助类中,例如:
App_Code 中的 AppHelper.vb:
Public Class AppHelper
Private Shared _rxRemoveHTML As New Regex("(<[\s\S]*?(style|script)[\s\S]*?>[\s\S]*?</[\s\S]*?(style|script)[\s\S]*?>)|<[^<>]*>|&#[0-9a-z]+;|&#|<|>|\\|`|\t", RegexOptions.IgnoreCase + RegexOptions.Multiline)
这将使其在应用程序的整个生命周期内保持事件状态。
公共(public)函数可以完成这项工作:
Public Shared Function RemoveHTML(ByVal sIn As String) As String
Return _rxRemoveHTML.Replace(sIn, "")
End Function
问题是,这对于网络应用程序来说是线程安全的吗?
最佳答案
是的,这样做是非常安全的。取自MSDN :
Thread Safety
The Regex class is immutable (read-only) and thread safe. Regex objects can be created on any thread and shared between threads
关于ASP.NET:使用应用程序范围的 Regex 对象安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299422/