全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1301
推到 Plurk!
推到 Facebook!

boost:regex 比對不正確

答題得分者是:GrandRURU
dadai
一般會員


發表:29
回覆:31
積分:12
註冊:2009-01-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-10 08:12:50 IP:219.90.xxx.xxx 未訂閱
小弟又來請教了  m(_ _)m

我在下面的這個網頁上輸入我想測試的Reg Exp
是可以match的
http://blog.roodo.com/rocksaying/archives/2670695.html

但是我用 boost::regex 測試卻一直無法match
以下是我的程式碼

[code cpp]
boost::wregex e( L"\\b(00107800|01199700)\\d{7}\\b" );
if( boost::regex_match(Edit1->Text.c_str(),e) )
ShowMessage( L"MATCH!!" );
else
ShowMessage( L"Not MATCH!!" );
[/code]

待測試的資料如下:
001078000012345
"001078000012345"

以上兩筆資料在網頁上測試都是沒問題的
但是用 boost::regex_match 的結果都是不 match

請問是我在使用 regex 有什麼遺漏的地方嗎?

編輯記錄
dadai 重新編輯於 2010-11-09 21:48:50, 註解 無‧
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-11-10 09:15:11 IP:203.75.xxx.xxx 未訂閱
你的排版…很亂,如果可以,請稍微修一下吧
不知道你是用 cb & regex 是用哪一版,我是用 BCB6 boos 1.44版來測,另一方面,官方教學也蠻簡單的,你可以看一下。

做一些調整後可以match到你要的字串,給你參考一下:
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
#include "D:/boost_1_44_0/boost/regex.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String tmpString = L"^\\b(00107800|01199700)\\d{7}\\b";
boost::regex e( tmpString.c_str() );
if( boost::regex_match(Edit1->Text.c_str(),e) )
ShowMessage( L"MATCH!!" );
else
ShowMessage( L"Not MATCH!!" );
}
//---------------------------------------------------------------------------
[/code]

===================引 用 dadai 文 章===================
小弟又來請教了 m(_ _)m

我在下面的這個網頁上輸入我想測試的Reg Exp
是可以match的
http://blog.roodo.com/rocksaying/archives/2670695.html

但是我用 boost::regex 測試卻一直無法match
以下是我的程式碼

[code cpp]

String tmpString = L"\b(00107800|01199700)\d{7}\b";
boost::wregex e( tmpString.c_str() );
if( boost::regex_match(Edit1->Text.c_str(),e) )
ShowMessage( L"MATCH!!" );
else
ShowMessage( L"Not MATCH!!" );
[/code]

待測試的資料如下:
001078000012345
"001078000012345"

以上兩筆資料在網頁上測試都是沒問題的
但是用 boost::regex_match 的結果都是不 match

請問是我在使用 regex 有什麼遺漏的地方嗎?

dadai
一般會員


發表:29
回覆:31
積分:12
註冊:2009-01-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-11-10 12:46:01 IP:219.90.xxx.xxx 未訂閱
冏....
我在編輯頁面上看起來很正常
怎麼到這邊就整個亂掉了
抱歉讓大家傷眼力了....Orz

而且看了 GrandRURU 的講解
才發現問題根本與 Regex 沒關係
是自己疏忽忘記 \ 前要再補一個 \ 了

我的 boost 是 1.35 版
之前我也曾經測試過其他 Regular Expression
是可以正常通過測試的
但是目前遇到某一個字串一直無法通過測試
可能是哪邊有所疏忽吧...Orz

感謝 GrandRURU 的指導


===================引 用 GrandRURU 文 章===================
你的排版…很亂,如果可以,請稍微修一下吧
不知道你是用 cb & regex 是用哪一版,我是用 BCB6 boos 1.44版來測,另一方面,官方教學也蠻簡單的,你可以看一下。

做一些調整後可以match到你要的字串,給你參考一下:
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "Unit1.h"
#include "D:/boost_1_44_0/boost/regex.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String tmpString = L"^\\b(00107800|01199700)\\d{7}\\b";
boost::regex e( tmpString.c_str() );
if( boost::regex_match(Edit1->Text.c_str(),e) )
ShowMessage( L"MATCH!!" );
else
ShowMessage( L"Not MATCH!!" );
}
//---------------------------------------------------------------------------
[/code]

系統時間:2017-10-20 18:28:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!