【问题标题】:Boost regex incorrect syntax提升正则表达式不正确的语法
【发布时间】:2010-10-30 00:55:40
【问题描述】:

我正在使用 c++ 下的 Boost 库来解析大量文本。我似乎对这个字符串有问题

text text text Seat 6: player_name (11,111) text text text

我正在尝试匹配中间位,座位号可以是 1 到 9 之间的任何值,player_name 可以是任何字符 a-zA-Z 并包括数字 *_。并且括号中的值可以是 0 到 1,000,000,并且应该包括 ','

我有这个在 c# 中工作的正则表达式,但在 boost 下不能工作,它不匹配,我不明白为什么在我的 RegexBuilder 中它返回正确:

Seat (?<seat_id>[0-9]): (?<player_name>[A-Z0-9]{1,}) (?<stack_size>\([0-9,]{1,}\))

有什么想法吗?我将省略 因为我只是要匹配字符串而不担心单个值。

谢谢,R。Happyholloween。

【问题讨论】:

    标签: c++ visual-studio-2008 boost


    【解决方案1】:

    玩家名称可以包含小写字母,但这不是您的代码所说的。代码说player_name 只能是数字和大写 字母。也许在您的 C# 代码中,您设置了一个标志以从检查中省略区分大小写。在 Boost 中,这是 regex_constants::icase;在创建regex 对象时使用它。

    另外,请记住regex_match 要求表达式匹配整个 输入字符串。如果您想知道正则表达式是否匹配输入中的 anywhere,请改用 regex_search

    【讨论】:

    • 谢谢,icase 的信息非常有用。由于某种原因,它在正则表达式的最后一部分失败了,它似乎不喜欢 ([0-9,]{1,0}) 我不确定我哪里出错了。它可以是 100 到 1,000,000 之间的值。由于某种原因,我无法让它匹配,也不知道为什么。啊,regex_search 也是我正在寻找的...谢谢。
    • 你之前没有写过{1,0}。你只说{1,}。这个新值意味着您需要至少一位,但不超过零。那显然永远不会匹配任何东西。如果您想说“一个或多个”,那么通常只写+。我担心你实际上并不知道你的目标是什么,因为你在描述它时是如此不一致。 (座位号应该是“1 到 9 之间的任何值”,但正则表达式显示 [0-9]。堆栈大小“可以是 0 到 1,000,000”或“从 100 到 1,000,000。”大写。数字计数。)采取一步回来弄清楚你需要什么。 然后写代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多