我試圖在文本中找到regex
模式。我們稱之爲文本:原文。 以下是該patternFinder()
程序代碼:傳遞字符串參數,從文件中讀取
vector <pair <long,long> >CaddressParser::patternFinder(string pattern)
{
string m_text1=m_text;
int begin =0;
int end=0;
smatch m;
regex e (pattern);
vector<pair<long, long>> indices;
if(std::regex_search(m_text1,m,e))
{
begin=m.position();
end=m.position()+m.length()-1;
m_text1 = m.suffix().str();
indices.push_back(make_pair(begin,end));
while(end<m_length&&std::regex_search(m_text1,m,e))
{
begin=end+m.prefix().length()+1;
end=end+m.prefix().length()+m.length();
indices.push_back(make_pair(begin,end));
m_text1 = m.suffix().str();
}
return indices;
}
else return indices;
}
我有以下regular Expression
:
"\\b[0-9]{3}\\b.*(Street).*[0-9]{5}"
,並在開頭提到的原文是:
- 辦法10.01。 2013 700 West Market Street OH 35611 asdh
只有粗體文本應該匹配正則表達式。 現在的問題是,當正則表達式作爲已從文本文件中讀取的字符串傳遞時,patternFinder()
無法識別該模式。儘管直接字符串(與文本文件中的直接字符串相同)作爲它的作用參數爲patternFinder()
。 這個問題從哪裏來?
,以下是我fileReader()
功能,我不認爲的代碼是提非常相關:
string CaddressParser::fileReader(string fileName)
{
string text;
FILE *fin;
fin=fopen(fileName.c_str(),"rb");
int length=getLength(fileName);
char *buffer= new char[length];
fread(buffer,length,1,fin);
buffer[length]='\0';
text =string(buffer);
fclose(fin);
return text;
}
如果你有'char * buffer = new char [length]',你真的不應該訪問'buffer [length]',它是在數組結尾之後。使它更大:'char * buffer = new char [length + 1]' – Messa
你能顯示文件的確切內容(包含正則表達式的文件)嗎?我在問,因爲當從文件中讀取時,當然需要反斜槓而不是雙反斜槓。 – Angew
@Angew謝謝你的回答,那就是問題所在。如果你願意,你可以寫你的解決方案作爲答案,我可以接受它,以便其他人也可以使用它。 –