⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 re_detail_vc6.inl

📁 我想很多人都用过一些成熟库的正则表达式
💻 INL
字号:
// re_detail_vc6.inl
// 
// 正则表达式解析库
// 
// 与2004年在北京写于创意鹰翔公司
// 版权申明:
// 作者放弃除著作署名权之外的任何权益。你可以在保留此申明的前提下,自由的,无限制的
// 分发、修改和使用本函数库。
// 如果你有任何建议和BUG汇报,欢迎你联系原始作者:tearshark@eaglefly.com.cn
//
// 原始作者 : lanzhengpeng(兰征鹏)
// Modify time : 2004-6-15 22:57
// 历史: 参看re_history.txt
//-----------------------------------------------------------------------------

//template<class TRAITS>
re_error /*re_pattern<TRAITS>::*/parse(const TRAITS::re_char * szStart,
										const TRAITS::re_char * szEnd = NULL,
										re_flags flags = rf_zero)
{
	clear();
	_push_syntex(new rp_array);
	
	if(szEnd == NULL)
		szEnd = reinterpret_cast<const re_char *>(reinterpret_cast<int>(szStart) + traits::ByteLen(szStart));
	
	assert(szEnd >= szStart);
	if(szEnd < szStart)
		return ree_address;

	m_eFlags = flags;
	if(flags & rf_nocase)
	{
		size_t nByteLen = reinterpret_cast<int>(szEnd) - reinterpret_cast<int>(szStart);
		re_char * sz = reinterpret_cast<re_char *>(new char[nByteLen]);
		
		ToLower(szStart,szEnd,sz);
		szStart = sz;
		szEnd = reinterpret_cast<const re_char *>(reinterpret_cast<int>(szStart) + nByteLen);
		
		m_eError = _parse(szStart,szEnd);
		m_Syntexes.clear();
		delete [] reinterpret_cast<char *>(sz);
		if(m_eError == ree_ok)
		{
			if(flags & rt_optimize)
				_optimize();
		}
		else
		{
			clear();
		}

		return m_eError;
	}
	else
	{
		m_eError = _parse(szStart,szEnd);
		m_Syntexes.clear();
		if(m_eError == ree_ok)
		{
			if(flags & rt_optimize)
				_optimize();
		}
		else
		{
			clear();
		}

		return m_eError;
	}
}

//template<class TRAITS>
re_error /*re_pattern<TRAITS>::*/match(const TRAITS::re_char * szStart,
								   re_result<TRAITS> & result,
								   const TRAITS::re_char * szEnd = NULL) const
{
	if(szEnd == NULL)
		szEnd = reinterpret_cast<const re_char *>(reinterpret_cast<int>(szStart) + traits::ByteLen(szStart));

	assert(szEnd >= szStart);
	if(szEnd < szStart)
		return ree_address;

	result.m_Groups.clear();
	if(option() & rf_nocase)
	{
		size_t nByteLen = reinterpret_cast<int>(szEnd) - reinterpret_cast<int>(szStart);
		re_char * szNew = reinterpret_cast<re_char *>(new char[nByteLen]);
		ToLower(szStart,szEnd,szNew);
		szEnd = reinterpret_cast<const re_char *>(reinterpret_cast<int>(szNew) + nByteLen);

		re_error e = _match(re_match_temp(szNew,szEnd,option()),szNew,result);
		if(e == ree_ok)
			result._repair(reinterpret_cast<int>(szStart) - reinterpret_cast<int>(szNew));
		delete [] reinterpret_cast<char *>(szNew);

		return e;
	}
	else
	{
		return _match(re_match_temp(szStart,szEnd,option()),szStart,result);
	}
}

//template<class TRAITS>
void /*re_pattern<TRAITS>::*/clear()
{
	m_eError = ree_ok;
	m_eFlags = rf_zero;
	m_nGroupId = 0;
	if(m_Syntex != NULL)
	{
		delete m_Syntex;
		m_Syntex = NULL;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -