- 发布者:
- MetaQuotes
- 显示:
- 4459
- 等级:
- 已发布:
- 2017.10.04 12:18
- 已更新:
- 2018.09.12 09:59
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
真正的作者:
Microsoft Corporation. 源代码来自.Net Framework 4.6.1。
注意:程序库适用于MetaTrader 4 build 1384 及更高版本。
解压文档到terminal_data_folder。
程序库代码位于:<terminal_data_folder>\MQL4\Include\RegularExpressions\
抽样测试脚本可以发现
在 <terminal_data_folder>\MQL4\Scripts\RegularExpressionsExamples\
这是.Net Framework 4.6.1的RegularExpressions的翻译。
若要使用程序库,要包括来自您代码库"\MQL4\Include\RegularExpressions\"目录的Regex.mqh文件。
同时作为测试用例服务的程序库还提供几个说明性的示例。所有样例都来自 Microsoft Corporation官方网站,它们生动地展示了C#正则表达式和在MQL4使用特点之间的主要区别。
以下是有关MQL4 RegularExpressions移植库包的更多详细信息:
程序包 |
描述 |
---|---|
CharUnicodeInfo.mqh |
存档 txt 文件以确定所有符号的Unicode类别(包括非拉丁字符)。 |
RegexCapture.mqh |
表示一个成功子表达式获得的结果。 |
RegexCaptureCollection.mqh |
表示由一个要匹配的组完成的采集设置。 |
RegexGroup.mqh | 表示来自一个要匹配的组的结果。 |
RegexGroupCollections.mqh | 表示组对象的集合。 |
RegexMatch.mqh | 表示来自一个正则表达式匹配的结果。 |
RegexMatchCollection.mqh | 表示通过迭代应用正则表达式模式到输入字符串所发现的成功匹配集合。 |
Regex.mqh | 表示一个不可变的正则表达式 |
RegexOptions.mqh | 提供用于设置正则表达式选项的枚举值。 |
来自RegexOptions.mqh文件的正则表达式参数:
参数 | 描述 |
---|---|
None | 指定没有 选项设置。 |
IgnoreCase | 说明不区分大小写匹配。 |
Multiline | 指定多行模式。 |
ExplicitCapture | 不收集未命名的组。 指定唯一有效采集是(?<name> subexpression)表格的明确命名或编号的组。 |
Singleline | 指定单行模式。 |
IgnorePatternWhitespace | 消除模式费转义的空白区,启用#标记的评论。 |
RightToLeft | 指定从右向左搜索,而不是从左向右。 |
Debug | 指定 程序 工作 在调试模式。 |
ECMAScript | 为表达式启用ECMAScript-compliant 行为。该值只能用于结合IgnoreCase 和 Multiline 值。 |
使用MQL4 RegularExpressions:
- 如同.Net 版本一样,该程序库实现了正则表达式的(静态缓存) 存储。所有隐式创建的正则表达式(Regex 类的实例)都写在那个存储。这个方法加快的脚本的操作速度,因为如果其模式与任何现有的匹配,那么它会消除重建正则表达式的需要。默认的存储大小是15。Regex::CacheSize() 类函数返回或设置最大的条目数在已编译正则表达式的当前静态缓存中。
- 使用MQL4 正则表达式的第二个特点紧随第一种。在于必须清除上述存储的事实。为此,请调用 Regex::ClearCache() 静态函数。建议只有在已经完成正则表达式以后才可调用该函数,否则有可能删除必要的指针。
- 与 .Net 不同的是,MQL4 没有实施 foreach 循环,因此处理的枚举也将不同。例如:
//--- C# 代码 Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase); string text = "The the quick brown fox fox jumped over the lazy dog dog."; MatchCollection matches = rx.Matches(text); foreach (Match match in matches) { //--- 处理中 } //--- MQL4 代码 Regex *rx = new Regex("\\b(?<word>\\w+)\\s+(\\k<word>)\\b", RegexOptions::IgnoreCase); string text = "The the quick brown fox fox jumped over the lazy dog dog."; MatchCollection *matches = rx.Matches(text); IEnumerator<Match*> *en = matches.GetEnumerator(); while(en.MoveNext()) { Match *match = en.Current(); //--- 处理中 } delete rx; delete matches; delete en; Regex::ClearCache();
- 从上述事例可以看到,C# 语法允许将 '@' 符号放在字符串前面 以忽略所有格式标记。在MQL4,不提供这个方法,所以正则表达式模式中所有控制字符都应该明确定义。
使用该格式时,选择所需的表格,选择筛选表格的列和值。按下查找 按键,筛选的表格将显示在下方,并包括一些统计数据。 保存 按键存储当前显示的表格到csv 文件。已保存的文件也将位于沙箱,命名为 Result.csv。
要了解有关 MQL4 RegularExpressions 和其功能的更多信息,请使用提供的 Tests.mqh 专家。它实施了大量的正则表达式的使用示例,涵盖了程序库所有的主要功能。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/16566