我有一个字符串可以是“/”“+”“。” 或描述性名称
我试图弄清楚如何使用正则表达式来检查字符串是否与上面的 3 个特殊字符(/ + 或 .)
在做了一些阅读之后,我决定 boost::xpressive 是要走的路,但我仍然无法弄清楚。
Boost:xpressive 是否适合这项任务,我的正则表达式字符串需要是什么?
谢谢
我有一个字符串可以是“/”“+”“。” 或描述性名称
我试图弄清楚如何使用正则表达式来检查字符串是否与上面的 3 个特殊字符(/ + 或 .)
在做了一些阅读之后,我决定 boost::xpressive 是要走的路,但我仍然无法弄清楚。
Boost:xpressive 是否适合这项任务,我的正则表达式字符串需要是什么?
谢谢
为什么不直接使用std::string::find_first_of()
来做自己的解决方案?听起来很多机器都可以完成一项相当简单的任务。
编辑
如果你仍然卡住,试试这个。
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
using namespace std;
using namespace boost::xpressive;
int main()
{
sregex re = sregex::compile("[+./]|[:word:]+");
sregex op = as_xpr('+') | '.' | '/';
sregex rex = op | (+alpha);
if (regex_match(string("word"), re))
cout << "word" << endl;
if (regex_match(string("word2"), re))
cout << "word2" << endl;
if (regex_match(string("+"), re))
cout << "+" << endl;
return 0;
}
有两种方法可以做同样的事情。命名的变量re
使用类似 perl 的正则表达式字符串进行初始化。rex
使用 Xpressive 原生元素。
我会说 Boost.Xpressive 可能对这项任务来说太过分了,但这是你的决定。
当您想要验证特别格式化的字符串时,正则表达式是救命稻草。在这里,没有涉及格式,只有一组可能的值。我的建议:如果您的问题可以通过简单、连续的字符串相等比较来解决,那么您可能不需要像正则表达式这样的东西。