.NET Regex Match方法中一致的字符串起始锚定行为

内特

.NET(我正在使用4.5.2)中的正则表达式似乎具有三种(非静态)Match方法:

  1. regex.Match(string input)在中搜索第一个匹配项input
  2. regex.Match(string input, int startIndex)input从开始搜索第一个匹配项startIndex
  3. regex.Match(string input, int startIndex, int length)用于在范围中的第一匹配搜索input通过定义startIndexlength

如果我写

System.Text.RegularExpressions.Regex regex =
    new System.Text.RegularExpressions.Regex("^abc");
string str = "abc abc";

System.Text.RegularExpressions.Match match = regex.Match(str);
System.Diagnostics.Debug.WriteLine(match.Success);

然后我看到的match.SuccessTrue,正如预期的那样。regex匹配abc之初str

如果我再写

int index = 4;
match = regex.Match(str, index);
System.Diagnostics.Debug.WriteLine(match.Success);

搜索从索引4到的末尾str,那么我看到的match.SuccessFalse,正如预期的那样。abc在索引4处有一个str,但索引4不是字符串的开头。

但是,如果我写

match = regex.Match(str, index, str.Length - index);
System.Diagnostics.Debug.WriteLine(match.Success);
System.Diagnostics.Debug.WriteLine(match.Index);

再从指数4搜到年底str,然后我看到那match.Success是意外True,而且match.Index是4。我希望得到的结果与调用regex.Match(str, index)

是否有办法在.NET Regex Match方法中获得一致的字符串起始锚行为?

维克多·史翠比维

Regex.cs源代码中的注释中,我看到可以public Match Match(String input, int startat) 找到第一个匹配项,从指定位置开始public Match Match(String input, int beginning, int length) 找到第一个匹配项,从而将搜索限制在char数组的指定间隔内

结合您的测试结果(和mine),很明显,该Regex.Match方法的最后一个重载将子字符串作为一个新的单独的字符串,并将其传递给regex引擎。没有改变^,以\A将有所帮助。

因此,要知道匹配项是否是真正的开始,您应该在自己的代码中添加逻辑,例如,如果index大于0,则所有匹配项都不是字符串的真正开始。但是,返回的索引是正确的,因此对我来说似乎是个错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala RegEx字符串提取器的行为不一致

来自分类Dev

Scala RegEx字符串提取器的行为不一致

来自分类Dev

匹配.NET Regex中的扩展ASCII字符

来自分类Dev

与.NET兼容的RegEx字符串用于货币

来自分类Dev

如何在字符串的最后一个逗号后添加文本?(RegEX的.Net版本)

来自分类Dev

C ++ 11 regex :: icase不一致的行为

来自分类Dev

URL根字符“〜”在ASP.NET MVC中的行为不一致

来自分类Dev

使用Regex和VB.NET在多个空格上分割字符串

来自分类Dev

在VB.NET中使用Regex在数值上拆分字符串

来自分类Dev

检查字符串是否为有效的RegEx模式VB.NET

来自分类Dev

在vb.net中使用RegEx从字符串获取值双精度值

来自分类Dev

在VB.NET中使用Regex在数字值上拆分字符串

来自分类Dev

NET中的递归RegEx?(?R)

来自分类Dev

VB Net RegEx匹配多个

来自分类Dev

修复Youtube URL RegEx(.NET ReGex引擎语法)

来自分类Dev

如何仅使用.Net Regex.Replace替换第一个匹配项

来自分类Dev

使用regex和vb.net替换String的一部分

来自分类Dev

如何仅使用.Net Regex.Replace替换第一个匹配项

来自分类Dev

.NET Core和.NET Framework之间Directory.EnumerateFiles的行为不一致

来自分类Dev

.net Regex.Replace中的错误?

来自分类Dev

.Net 3.5 Regex.IsMatch中的句点

来自分类Dev

寻找分号时的.NET Regex否定超前

来自分类Dev

在vb.net中使用RegEx

来自分类Dev

C ++ regex_match行为

来自分类Dev

如何在 VB.net 中获取文本字符串并检查 Regex 是否找到了文本字符串?

来自分类Dev

唯一的RegEx字符串

来自分类Dev

.net Regex性能注意事项:使用(部分或全局)不区分大小写的匹配或显式字符组?

来自分类Dev

有没有办法让 VB.NET RegEx.Replace 在 REPLACEMENT 参数中使用特殊字符?

来自分类Dev

如何匹配这些单词中的任何一个,但仅匹配.NET Regex列表中的最后一个

Related 相关文章

  1. 1

    Scala RegEx字符串提取器的行为不一致

  2. 2

    Scala RegEx字符串提取器的行为不一致

  3. 3

    匹配.NET Regex中的扩展ASCII字符

  4. 4

    与.NET兼容的RegEx字符串用于货币

  5. 5

    如何在字符串的最后一个逗号后添加文本?(RegEX的.Net版本)

  6. 6

    C ++ 11 regex :: icase不一致的行为

  7. 7

    URL根字符“〜”在ASP.NET MVC中的行为不一致

  8. 8

    使用Regex和VB.NET在多个空格上分割字符串

  9. 9

    在VB.NET中使用Regex在数值上拆分字符串

  10. 10

    检查字符串是否为有效的RegEx模式VB.NET

  11. 11

    在vb.net中使用RegEx从字符串获取值双精度值

  12. 12

    在VB.NET中使用Regex在数字值上拆分字符串

  13. 13

    NET中的递归RegEx?(?R)

  14. 14

    VB Net RegEx匹配多个

  15. 15

    修复Youtube URL RegEx(.NET ReGex引擎语法)

  16. 16

    如何仅使用.Net Regex.Replace替换第一个匹配项

  17. 17

    使用regex和vb.net替换String的一部分

  18. 18

    如何仅使用.Net Regex.Replace替换第一个匹配项

  19. 19

    .NET Core和.NET Framework之间Directory.EnumerateFiles的行为不一致

  20. 20

    .net Regex.Replace中的错误?

  21. 21

    .Net 3.5 Regex.IsMatch中的句点

  22. 22

    寻找分号时的.NET Regex否定超前

  23. 23

    在vb.net中使用RegEx

  24. 24

    C ++ regex_match行为

  25. 25

    如何在 VB.net 中获取文本字符串并检查 Regex 是否找到了文本字符串?

  26. 26

    唯一的RegEx字符串

  27. 27

    .net Regex性能注意事项:使用(部分或全局)不区分大小写的匹配或显式字符组?

  28. 28

    有没有办法让 VB.NET RegEx.Replace 在 REPLACEMENT 参数中使用特殊字符?

  29. 29

    如何匹配这些单词中的任何一个,但仅匹配.NET Regex列表中的最后一个

热门标签

归档