【问题标题】:How to use NSScanner to scan in the format of ^[a-zA-Z_][a-zA-Z0-9_]*如何使用 NSScanner 扫描 ^[a-zA-Z_][a-zA-Z0-9_]* 格式
【发布时间】:2011-09-29 07:09:41
【问题描述】:

我正在尝试让我的 NSScanner 尝试扫描以下正则表达式:[a-zA-Z_][a-zA-Z0-9_]*,但遇到了困难。

我可以尝试先读取 a-Z_,然后尝试追加 a-Z0-9_。

我想知道是否有更简单/更有效的方法来做到这一点。请告诉我,谢谢。


澄清: 我不想执行正则表达式。我只是想读取一个看起来像上面的正则表达式的字符串。看起来类似于 C 风格变量的东西。基本上,任何字母数字单词,但不能以数字开头。


说明 2: 我正在尝试让扫描仪读取([] 表示每个读取令牌): “测试 3”为 [测试,3] "test3" 作为 [test3] "3test" 作为 [3, 测试] "_3test" 作为 [_3test] “_3 测试”为 [3, 测试] " 3 3test" 作为 [, 3, 3, test] " 3 test3" as [_, 3, test3]

【问题讨论】:

  • 请发布您的代码。另外,您为什么要扫描正则表达式字符串?可能有更好的方法来做你想做的事情。
  • 您是在尝试解析正则表达式,还是做与正则表达式相同的事情?
  • @Peter:我只是想完成扫描(与正则表达式相同);认为正则表达式可以更好地解释我想要扫描的内容。

标签: cocoa nsscanner


【解决方案1】:

您需要两个字符集:

使用这些将使您能够匹配 所有 Unicode 中的字母和数字,而不仅仅是英文字母和数字集。如果你真的只想要那些小得多的集合,它们很容易使用characterSetWithCharactersInString: 和/或characterSetWithRange: 构建。如果使用后一种方法,则需要在其中创建一个 NSMutableCharacterSet 和 union 另一个字符集。

一旦你有了你的字符集,很容易scan characters only characters within a set,然后,如果你愿意,concatenate one string onto the other

【讨论】:

  • 这不能解决我的问题。以下面的字符串为例:“this 3 will fail”。根据您的方法,无法确定“this 3”是否等于“this3”。我会在不知道是否会得到一个整数以及它是否由空格(或其他跳过的字符)分隔的情况下大嚼空格。
  • @David:这与您提出的问题无关,该问题在正则表达式中不包含任何空格。尽管如此,您也可以使用 NSScanner 使用不同的字符集来做到这一点。如果您不希望它自动吃空格,请不要忘记将扫描仪的跳过字符集设置为空字符集。
  • 重点是我希望它像正则表达式一样工作。我不希望它跳过空格,但如果“测试”和“3”之间有空格,我也不希望它读取“测试 3”。但是,根据您的解释,它会做到这一点。
【解决方案2】:

这取决于你想做什么。 如果你想使用正则表达式,我听说过这个框架: RegexKit

您可以通过字符串、数组、字典等更轻松地应用正则表达式...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2015-01-07
    • 2010-12-11
    • 1970-01-01
    • 2021-11-09
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多