我正在使用 gtest 進行單元測驗并嘗試使用該函式MatchesRegex來匹配字串包含多個子字串的模式,使用環顧四周。例如
驗證陳述句The team members are Tom, Jerry and a Terminator包含所有三個關鍵字Tom,Jerry并且Term
std::string target = "The team members are Tom, Jerry and a Terminator";
EXPECT_THAT(target, MatchesRegex("(?=.*(Tom))(?=.*(Jerry))(?=.*(Term))"));
但我收到一個錯誤
Regular expression "((?=.*(Tom))(?=.*(Jerry))(?=.*(Term)))" is not a valid POSIX Extended regular expression.
有什么建議可以修復正則運算式嗎?
測驗代碼可以在這里找到
uj5u.com熱心網友回復:
C 中的 POSIX 正則運算式非常有限。幸運的是,您可以邏輯地結合期望。
#include <iostream>
#include <string>
#include <gmock/gmock.h>
using testing::AllOf;
using testing::MatchesRegex;
TEST(RegexTest, Simple_Regex_Matcher) {
std::string target = "The team members are Tom, Jerry and a Terminator";
EXPECT_THAT(target, AllOf(MatchesRegex(".*Tom.*"), MatchesRegex(".*Jerry.*"), MatchesRegex(".*Term.*")));
}
int main(int argc, char*argv[]) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
輸出:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from RegexTest
[ RUN ] RegexTest.Simple_Regex_Matcher
[ OK ] RegexTest.Simple_Regex_Matcher (0 ms)
[----------] 1 test from RegexTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 1 test.
uj5u.com熱心網友回復:
我將@273k的答案標記為已接受的答案。但在我的最終解決方案中,我使用了類似的東西
EXPECT_THAT(target, AllOf(HasSubstr("Tom"), HasSubstr("Jerry"), HasSubstr("Term")));
這受到@273k答案的啟發。正則運算式更短更慢,但 AllOf HasSubstr 具有更好的可讀性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410145.html
標籤:
上一篇:在長字串中的符號之間提取特定數字
下一篇:撇號和正則運算式;R中的清理文本
