如何使用正则表达式regex库表示汇编lw / sw指令?

时间:2016-11-18 08:33:10

标签: c++ regex

我想检测用户输入“lw 2,3(9)”的时间,但是它无法读取括号,我使用了这段代码,但它仍然没有检测到括号。

    { R"((\w+) ([[:digit:]]+), ([[:digit:]]+) (\\([[:digit:]]+\\)) )"}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

您需要注意模式中的空格过多,并且因为您使用的是原始字符串文字,所以不应该双重转义特殊字符:

R"((\w+) ([[:digit:]]+), ([[:digit:]]+)(\([[:digit:]]+\)))"
                                      ^^^             ^ ^^

[[:space:]]+替换文字空格可能是个好主意。

C++ demo打印lw 2, 3(9)

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
    regex rx(R"((\w+) ([[:digit:]]+), ([[:digit:]]+)(\([[:digit:]]+\)))");
    string s("Text lw 2, 3(9) here");
    smatch m;
    if (regex_search(s, m, rx)) {
        std::cout << m[0] << std::endl;
    }
    return 0;
}

答案 1 :(得分:0)

let date1            = Date()
let formatter        = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
print(formatter.string(from: date1))

let dateTime            = "2013-01-24 18:30 PM"
let dateFormater        = DateFormatter()
dateFormater.dateFormat = "yyyy-MM-dd HH:mm a"
let AptDate             = dateFormater.date(from: dateTime)
dateFormater.dateFormat = "MMM dd,yyyy hh:mm a"
let strDate             = dateFormater.string(from: AptDate!)

print("===> \(AptDate!)")
print("===> \(strDate)")

为我工作

答案 2 :(得分:0)

由于您没有指定是否要捕获某些内容,因此我会提供两个代码段。

您不必使用原始字符串文字转义字符,但必须转义捕获组

#include <iostream>
#include <string>
#include <regex>

int main()
{
    std::string str = "lw 2, 3(9)";

    {
        std::regex my_regex(R"(\w+ \d+, \d+\(\d+\))");
        if (std::regex_search(str, my_regex)) {
            std::cout << "Detected\n";
        }
    }

    {
        // With capture groups
        std::regex my_regex(R"((\w+) (\d+), (\d+)(\(\d+\)))");
        std::smatch match;
        if (std::regex_search(str, match, my_regex)) {
            std::cout << match[0] << std::endl;
        }
    }
}

Live example

另一项改进可能是使用\s+处理多个间距(如果在您的特定情况下允许)。

我无法帮助,但注意到EJP's concerns也可能是正确的:这是一个非常脆弱的解析解决方案。