在 C++Builder 中使用 boost::regex 提取双引号
Extract double quotes using boost::regex in C++Builder
我正在使用C++Builder XE6研究词法分析器,这就是我到目前为止所做的:我有两个备忘录(memoIN,memoOUT)。memoIN 包含要分析的文本,并 memoOUT 输出(标记列表)。首先,我使用 boost::regex 从所有评论中删除 memoIN 内容,这就像一个魅力。现在我坚持如何从文本中提取所有双引号并将它们显示为输出备忘录中的字符串。
到目前为止,iIhave只是一个表达式,它删除了所有双引号,但不是我需要的,我需要提取主题并显示主题,例如:
备忘录 :
This is a "Double" Quote and this is "another one"
备忘录 :
<(String "Double") #Line 01 #Length 06)>
<(String "another one") #Line 01 #Length 11)>
使用 Boost.Regex
下面是一些示例代码,演示如何使用 boost::regex
提取引号内的文本。
#include <string>
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main(int argc, char **argv) {
// Capture any non-quotes that occur within double quotes.
boost::regex re(""([^"]+)"");
// Input text
std::string memoIN = "This is a "Double" Quote and this is "another one"";
// Iterate through memoIN
boost::sregex_iterator m1(memoIN.begin(), memoIN.end(), re);
// Ending iterator (using the default constructor)
boost::sregex_iterator m2;
for (; m1 != m2; ++m1) {
// Replace this with code to organize memoOUT
std::cout << (*m1)[1].str() << std::endl;
}
return 0;
}
使用词法分析器库
根据你的需求有多复杂,你可能会发现,从长远来看,使用专用的词法分析和解析器生成器(如ANTLR3 C)比使用Boost.Regex编写自己的词法器和解析器生成器更好。
与 UnicodeString 接口
有几种方法可以处理 C++Builder 的AnsiString
和UnicodeString
与标准C++的std::string
和std::wstring
之间的不匹配。一种简单的方法是将UnicodeString
转换为std::string
以进行内部文本操作,然后将其转换回 UI 的UnicodeString
。 例如:
// Use AnsiString to convert from UTF-16 to a narrow character encoding
std::string memoIN_text = AnsiString(MemoIN->Text).c_str();
std::string memoOUT_text;
// Insert Boost.Regex manipulation here and assign the results to memoOUT_text
// Use implicit conversion from const char* to AnsiString/UnicodeString
MemoOUT->Text = memoOUT_text.c_str();
从Unicode转换为ANSI可能会丢失数据,因此您可能需要使用SetMultiByteConversionCodePage告诉C++Builder对AnsiString使用UTF-8。 (字符编码非常复杂,可以成为它自己的主题。
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么istream不支持右值提取
- 此模式的C++RegEx
- 如何设置一个范围来提取我想要获得的信息
- 视觉工作室项目.提取源文件夹名称
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 从字符串中提取整数并形成一个数组
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 使用 c++/boost::regex 提取 HTML 文件的特定部分
- Regex,用于从C++代码中提取函数
- 在 C++Builder 中使用 boost::regex 提取双引号
- Regex无法从字符串中提取双参数子字符串
- Regex表达式提取括号内的所有内容
- c++ regex提取子字符串
- 在c++中使用boost regex提取子匹配
- Regex:C++提取双引号内的文本
- Regex C++:提取标记之间的子字符串
- 从std::regex中提取原始regex模式