mirror of
https://github.com/boostorg/regex.git
synced 2025-07-14 21:06:38 +02:00
makefile adjustments
[SVN r9396]
This commit is contained in:
@ -1,20 +0,0 @@
|
||||
# Makefile for timer application
|
||||
#
|
||||
# for SUN workshop 5.0 C++ compiler
|
||||
#
|
||||
|
||||
CXX=CC
|
||||
CPP_FLAGS = -O -I../../../../ -I./
|
||||
|
||||
%.o : %.cpp
|
||||
$(CXX) -c -o $@ $(CPP_FLAGS) $<
|
||||
|
||||
jgrep : jgrep.o main.o
|
||||
$(CXX) -o $@ $(CPP_FLAGS) jgrep.o main.o -L../../lib -lregex++
|
||||
|
||||
clean:
|
||||
rm -rf SunWS_cache
|
||||
rm -f jgrep.o jgrep main.o
|
||||
|
||||
|
||||
|
@ -1,29 +0,0 @@
|
||||
# Makefile for timer application
|
||||
#
|
||||
# for SUN workshop 5.0 C++ compiler
|
||||
#
|
||||
|
||||
CXX=CC
|
||||
CPP_FLAGS = -O -I../../../../ -I./
|
||||
|
||||
all: r2 r5
|
||||
r2 tests.txt
|
||||
r5 tests.txt
|
||||
|
||||
%.o : %.cpp
|
||||
$(CXX) -c -o $@ $(CPP_FLAGS) $<
|
||||
|
||||
r2 : tests.cpp parse.cpp regress.cpp
|
||||
$(CXX) -o $@ $(CPP_FLAGS) tests.cpp parse.cpp regress.cpp -L../../lib -lregex++
|
||||
|
||||
r5 : tests.cpp parse.cpp regress.cpp
|
||||
$(CXX) -o $@ $(CPP_FLAGS) -DTEST_UNICODE tests.cpp parse.cpp regress.cpp -L../../lib -lregex++
|
||||
|
||||
clean:
|
||||
rm -rf SunWS_cache
|
||||
rm -f r2.o r2 r5 r5.o
|
||||
|
||||
|
||||
|
||||
|
||||
|
82
demo/snippets/partial_regex_grep.cpp
Normal file
82
demo/snippets/partial_regex_grep.cpp
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
// match some kind of html tag:
|
||||
boost::regex e("<[^>]*>");
|
||||
// count how many:
|
||||
unsigned int tags = 0;
|
||||
// saved position of partial match:
|
||||
char* next_pos = 0;
|
||||
|
||||
bool grep_callback(const boost::match_results<char*>& m)
|
||||
{
|
||||
if(m[0].matched == false)
|
||||
{
|
||||
// save position and return:
|
||||
next_pos = m[0].first;
|
||||
}
|
||||
else
|
||||
++tags;
|
||||
return true;
|
||||
}
|
||||
|
||||
void search(std::istream& is)
|
||||
{
|
||||
char buf[4096];
|
||||
next_pos = buf + sizeof(buf);
|
||||
bool have_more = true;
|
||||
while(have_more)
|
||||
{
|
||||
// how much do we copy forward from last try:
|
||||
unsigned leftover = (buf + sizeof(buf)) - next_pos;
|
||||
// and how much is left to fill:
|
||||
unsigned size = next_pos - buf;
|
||||
// copy forward whatever we have left:
|
||||
memcpy(buf, next_pos, leftover);
|
||||
// fill the rest from the stream:
|
||||
unsigned read = is.readsome(buf + leftover, size);
|
||||
// check to see if we've run out of text:
|
||||
have_more = read == size;
|
||||
// reset next_pos:
|
||||
next_pos = buf + sizeof(buf);
|
||||
// and then grep:
|
||||
boost::regex_grep(grep_callback,
|
||||
buf,
|
||||
buf + read + leftover,
|
||||
e,
|
||||
boost::match_default | boost::match_partial);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if(argc > 1)
|
||||
{
|
||||
for(unsigned int i = 1; i < argc; ++i)
|
||||
{
|
||||
std::ifstream fs(argv[i]);
|
||||
if(fs.bad()) continue;
|
||||
search(fs);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string one("<META NAME=\"keywords\" CONTENT=\"regex++, regular expressions, regular expression library, C++\">");
|
||||
std::string what;
|
||||
while(what.size() < 10000)
|
||||
{
|
||||
what.append(one);
|
||||
what.append(13, ' ');
|
||||
}
|
||||
std::stringstream ss;
|
||||
ss.str(what);
|
||||
search(ss);
|
||||
}
|
||||
std::cout << "total tag count was " << tags << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
46
demo/snippets/partial_regex_match.cpp
Normal file
46
demo/snippets/partial_regex_match.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
boost::regex e("(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})");
|
||||
|
||||
bool is_possible_card_number(const std::string& input)
|
||||
{
|
||||
//
|
||||
// return false for partial match, true for full match, or throw for
|
||||
// impossible match based on what we have so far...
|
||||
boost::match_results<std::string::const_iterator> what;
|
||||
if(0 == boost::regex_match(input, what, e, boost::match_default | boost::match_partial))
|
||||
{
|
||||
// the input so far could not possibly be valid so reject it:
|
||||
throw std::runtime_error("Invalid data entered - this could not possibly be a valid card number");
|
||||
}
|
||||
// OK so far so good, but have we finished?
|
||||
if(what[0].matched)
|
||||
{
|
||||
// excellent, we have a result:
|
||||
return true;
|
||||
}
|
||||
// what we have so far is only a partial match...
|
||||
return false;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try{
|
||||
std::string input;
|
||||
std::cin >> input;
|
||||
if(is_possible_card_number(input))
|
||||
{
|
||||
std::cout << "Matched OK..." << std::endl;
|
||||
}
|
||||
else
|
||||
std::cout << "Got a partial match..." << std::endl;
|
||||
}
|
||||
catch(const std::exception& e)
|
||||
{
|
||||
std::cout << e.what() << std::endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -3,13 +3,14 @@
|
||||
#
|
||||
# GNU compiler GCC
|
||||
#
|
||||
CXX=-I../../../../ -I./
|
||||
CXX= $(INCLUDES) -I../../../../ -I./ $(CXXFLAGS)
|
||||
|
||||
timer : regex_timer.cpp
|
||||
g++ $(CXX) -O2 -o timer regex_timer.cpp -L../../lib/gcc -lregex++
|
||||
g++ $(CXX) -O2 -o timer regex_timer.cpp -L../../lib/gcc $(LDFLAGS) -lregex++ $(LIBS)
|
||||
|
||||
debug : regex_timer.cpp timer.cpp
|
||||
g++ $(CXX) -g -o timer regex_timer.cpp -L../../lib/gcc -lregex++debug
|
||||
g++ $(CXX) -g -o timer regex_timer.cpp -L../../lib/gcc $(LDFLAGS) -lregex++debug $(LIBS)
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,24 +0,0 @@
|
||||
# Makefile for timer application
|
||||
#
|
||||
# for SUN workshop 5.0 C++ compiler
|
||||
#
|
||||
|
||||
CXX=CC
|
||||
CPP_FLAGS = -O -I../../../../ -I./
|
||||
|
||||
%.o : %.cpp
|
||||
$(CXX) -c -o $@ $(CPP_FLAGS) $<
|
||||
|
||||
timer : regex_timer.o
|
||||
$(CXX) -o $@ $(CPP_FLAGS) regex_timer.o -L../../lib -lregex++
|
||||
|
||||
timer.o : ../../../timer/timer.cpp
|
||||
$(CXX) -c $(CPPFLAGS) ../../../timer/timer.cpp
|
||||
|
||||
clean:
|
||||
rm -rf SunWS_cache
|
||||
rm -f timer.o timer
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user