這個問題的答案可能是一個簡單的沒有,但在這裏不用...C++提振正則表達式哪一個元素是真的
我目前使用升壓功能regex_match來評估對正則表達式值的字符串。
而不是隻是返回T/F,有沒有辦法找出多個聯合語句的哪個元素評估爲真?
例如:
^a$|^z$|^p$
a --> 0
z --> 1
f --> -1
這個問題的答案可能是一個簡單的沒有,但在這裏不用...C++提振正則表達式哪一個元素是真的
我目前使用升壓功能regex_match來評估對正則表達式值的字符串。
而不是隻是返回T/F,有沒有辦法找出多個聯合語句的哪個元素評估爲真?
例如:
^a$|^z$|^p$
a --> 0
z --> 1
f --> -1
括它們捕獲括號,然後測試其子表達式匹配。
(^a$)|(^z$)|(^p$)
match_results m;
regex_match(..., m);
一個 - >m[1].matched
ž - >m[2].matched
p - >m[3].matched
更新:
您也許能夠改善它通過使單個捕獲組和測試結果,例如:
^([azp])$
...
if ('a' == m[0][0]) ...
兩種方法幾乎肯定比調用regex_match
快三倍,但要確保您只需要測試它。除非你經常這樣做真的,差別不值得擔心。
顯然,請確保您只設置一次正則表達式,而不是每次都需要它。
如果需要它真的,真的很快,你可能不應該使用正則表達式。
如果你想分析你的文字匹配的詳細程度,也許你應該考慮使用boost的Spirit,而不是正則表達式。
您對解決方案的速度有任何見解,而不是僅僅調用3次不同的regex_match? – tinkertime 2009-12-16 20:51:33
我想如果你擔心速度,你應該使用自定義詞法分析器(或lex)而不是正則表達式。更可能不值得擔心。 – 2009-12-16 20:58:52