棘手的子字符串问题
Tricky substring problems
我有子字符串的问题,我有一个字符串在我下面的格式当前正在使用getline.
Richard[12345/678910111213141516] was murdered
我一直使用的是find_last_of
和find_first_of
来获取括号和正斜杠之间的位置以检索每个字段。我有这个工作和功能,但我遇到了一个问题。name字段的长度可以是32个字符,并且可以包含/和[],所以当我最终遇到一个用户的URL为他的名字时,它不喜欢这样。这些数字在每个用户的基础上也是随机的。我正在从字符串中检索每个字段,名称和两个标识号。
另一个字符串可以是这样的,所以我将抓取6个子字符串。
Richard[12345/678910111213141516] was murdered by Ralph[54321/161514131211109876]
这只是另一个巨大的混乱,我想做的是从后面开始移动到前面,但是如果第二个名称字段(Ralph)包含任何/或[],它将破坏检索第一部分的计数。任何见解都会有帮助。谢谢你。
简而言之。我怎么解释这些呢?
名称也可以包含任何字母/数字和特殊字符。
Richard///[][][12345/678910111213141516] was murdered by Ralph[/[54321/161514131211109876]
最终结果将是包含这个的6个子字符串。
- Richard///
- [] []
- 12345
- 678910111213141516 Ralph [/
- 54321
- 161514131211109876
Regex已经向我提到过,但我不知道它是否更适合这项任务,我包含了标签,所以更有经验的人可能会回答/评论
下面是一个获取所有值的正则表达式:
string str = "Richard///[][][12345/678910111213141516] was murdered by Ralph[/[54321/161514131211109876]";
regex rgx1(R"(([A-Z]w*s*S*)[(d+)?(?:/(d+))?])");
smatch smtch;
while (regex_search(str, smtch, rgx1)) {
std::cout << "Name: " << smtch[1] << std::endl;
std::cout << "ID1: " << smtch[2] << std::endl;
std::cout << "ID2: " << smtch[3] << std::endl;
str = smtch.suffix().str();
}
参见IDEONE demo
正则表达式(S*)[(d+)?(?:/(d+))?]
匹配
-
(S*)
-(第1组)0个或多个非空白符号,尽可能多。 -
[
-左方括号(必须转义,因为它是正则表达式中为字符类保留的特殊字符) -
(d+)?
-(组2)1位或1位以上数字(可选组,可为空) -
(?:/(d+))?
-非捕获可选组匹配-
/
- literal/
-
(d+)
-(组3)1位或以上数字。
-
-
]
-右方括号。
一种可能的正则表达式解决方案是使用如下模式:
(S+)[(d+)/(d+)](?:s|$)
,它将匹配并存储名称(及其元属性)。我现在正在想它什么时候会破裂。
可以在regex101上进行测试。
相关文章:
- setlocale的C++土耳其字符串问题
- C++字符串问题-如何访问字符串元素
- 提升,从字符串问题中获得时间
- 字符串问题中的系统( "command" ) 字符串
- 从文件和字符串问题中读取
- 将C++函数转换为 C#(字符串问题)
- 有关字符串C++问题
- Visual Studio和Xcode之间的Chaiscript字符串问题
- 回文字符串问题:为什么我必须放+1而不是-1才能让这个代码工作
- Dll导入Marshal C++字符串问题
- 崩溃:字符串问题
- 正在寻找另一种解决二进制字符串问题的尝试
- C++ Win32 是字符串问题
- 迭代器字符串问题
- Python 3:Python/C API字符串问题
- 带有空格的C++字符串问题
- 有些字符串问题
- C++11 std::regex_replace()创建带有特定字符串问题的regexp
- Turbo C++的字符串问题
- 棘手的子字符串问题