我正在编写一个与GNU C正则表达式库一起使用的正则表达式:
字符串的格式为:(斜体文字是对内容的描述)
(不是#)启动(可能是空格):数据
我编写了以下代码,但它不匹配。
regcomp(&start_state, "^[^#][ \\t]*\\(start\\)[ \\t]*[:].*$", REG_EXTENDED);
我需要写什么?
例子: 匹配:
州:q0
州:q0
状态:q0s
不匹配:
#state:q0
国家q0
#state:q0
谢谢!
答案 0 :(得分:7)
您的问题中的模式消耗了state
中带有[^#]
的第一个字母,这使得匹配无法继续,因为它尝试将tate
与模式{{1}匹配}。
您传递了标记\(state\)
,这意味着您不会转义捕获括号,但会删除字面括号。
使用正则表达式,说出做想要匹配的内容:
REG_EXTENDED
,如
^[ \\t]*(state)[ \\t]*:.*$
输出:
state : q0: match (PASS) state: q0: match (PASS) state:q0s: match (PASS) #state :q0: no match (PASS) state q0: no match (PASS) # state :q0: no match (PASS)
答案 1 :(得分:1)
好的,我明白了:
regcomp(&start_state, "^[^#]*[ \\t]*start[ \\t]*:.*$", REG_EXTENDED);
上面解决了我的问题! (事实证明,我忘了在[^#]之后加上* ...)
谢谢你的帮助,鲁本斯! :)
答案 2 :(得分:0)
这适用于您的示例数据:
^[^#]\s*\w+\s*:(?<data>.*?)$
编辑:我不知道,但您需要启用多行支持,因为第一个^
和最后一个$
对该设置有不同的行为。