【发布时间】:2020-10-21 10:59:46
【问题描述】:
我需要检查一个正则表达式模式是否与所有目标字符串匹配。
例如,如果模式是'[0-9]+':
- 目标字符串
'123'应该是True - 目标字符串
'123' + sLineBreak应该是False
代码应如下所示:
uses
System.RegularExpressions;
begin
if(TRegEx.IsFullMatch('123' + sLineBreak, '[0-9]+'))
then ShowMessage('Match all')
else ShowMessage('Not match all');
end;
我试过TRegEx.Match(...).Success 和TRegEx.IsMatch 都没有成功,我想知道是否有一种简单的方法可以检查模式是否与整个目标字符串匹配。
我也尝试过使用^ - start of line 和$ - end of line,但没有任何成功。
uses
System.RegularExpressions;
begin
if(TRegEx.IsMatch('123' + sLineBreak, '^[0-9]+$'))
then ShowMessage('Match all')
else ShowMessage('Not match all');
end;
Here 你可以找到一个在线测试,证明如果目标字符串以新行结尾,即使使用行首/行尾,正则表达式仍然匹配。
【问题讨论】:
-
您尝试过使用锚点吗?
^[0-9]+$ -
@Thefourthbird:是的,但它并不总是有效,我已经更新了问题中的示例
-
Strings Ending with a Line Break 部分解释了为什么您应该使用
\z而不是$以避免在上一个示例中匹配。 -
@BrakNicku:看来
\z解决了我的问题,谢谢
标签: regex delphi delphi-xe7