用正则表达式 生成随机字符串

daidodo 2009-11-25 05:37:16
写了一个小工具,根据指定的正则表达式,产生若干随机字符串。

开放源码,希望大家多提意见和建议。

Linux下的安装包及源码下载地址:
http://regxstring.googlecode.com/files/regxstring_0.1.tar.gz

示例用法:
~# echo "\w{3,16}" | regxstr 10

作用为产生10个符合正则表达式“\w{3,16}”的字符串

同时提供头文件,静态库和共享库,使用方法为:
#include <iostream>
#include <regxstring.h>

using namespace std;

int main()
{
const char * expr = "\\w{3,16}";
CRegxString regxstr;
regxstr.ParseRegx(expr);
for(int i = 0;i < 10;++i)
cout<<regxstr.RandString()<<endl;
return 0;
}


链接时加入 -lregxstr 选项即可。
...全文
1925 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
MultiStone 2012-08-30
  • 打赏
  • 举报
回复
C:\Documents and Settings\lx>echo "^kernel: CF: .*[Ff]ailed" | regxstr 2
"^kernel: CF: Failed"
"^kernel: CF: !oafailed"

windows里面怎么把"^"这个符号也输出来了?
ccchu 2012-07-17
  • 打赏
  • 举报
回复
((http[s]{0,1}|ftp)://[a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,4})(:\d+)?(/[a-zA-Z0-9\.\-~!@#$%^&*+?:_/=<>]*)?)
会生成
ftp://U.Ch/"

但不应该有双引号存在,检查发现可能是对字符^识别有问题
ccchu 2012-07-13
  • 打赏
  • 举报
回复
怒赞,准备使用下这个库
haozhonghude 2012-03-08
  • 打赏
  • 举报
回复
您好,我想请问您的dll是如何生成的?需要输入正则表达式字符串,且返回满足表达式的字符串数组,另外就是您说的数据重复问题解决了吗?如果解决的话,麻烦发dll和接口说明到我邮箱好么?407361892@qq.com[Quote=引用 29 楼 bawgiitx 的回复:]

C/C++ code

//cpp
#include "RandomString.h"
#include "regxstring.h"
#include <math.h>
#include <stdio.h>
#include <string.h>


jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strC……
[/Quote]
haozhonghude 2012-03-07
  • 打赏
  • 举报
回复
你好,能将dll及接口发我下么?407361892@qq.com[Quote=引用 15 楼 spike2004 的回复:]

真的很强大 在VS中运行正常 可我想在Java中引用一下 用了JNI 却有如下的提示:
/dll
/implib:regexGenerate.lib
/out:regexGenerate.dll
regexGenerate.obj
正在创建库 regexGenerate.lib 和对象 regexGenerate.exp
regexGenerate.obj : error LN……
[/Quote]
haozhonghude 2012-03-07
  • 打赏
  • 举报
回复
你好!看了你的帖子,受益匪浅!希望后面有什么问题能与您交流!
liyan342854732 2011-11-03
  • 打赏
  • 举报
回复
如果在java平台上实现 各位大神有没有实现方法呢
tearmap 2011-10-13
  • 打赏
  • 举报
回复
我看了doc文档了,但是文档没有写程序的运行原理。能私聊么?你的QQ是多少?我的
QQ:35145066
daidodo 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 tearmap 的回复:]

我想学习一下这个代码,请问从哪下手?
[/Quote]
可以先看doc文档,从算法开始理解。
tearmap 2011-10-12
  • 打赏
  • 举报
回复
我想学习一下这个代码,请问从哪下手?
daidodo 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 zhao4zhong1 的回复:]

下载看了一下,不错。
是否支持汉字?
[/Quote]
不支持宽字符。
tearmap 2011-10-09
  • 打赏
  • 举报
回复
能不能给一下代码的注释啊?看不懂啊……感谢你的热心回复!
赵4老师 2011-10-09
  • 打赏
  • 举报
回复
下载看了一下,不错。
是否支持汉字?
daidodo 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 tearmap 的回复:]

Compiling...
main.cpp
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring.h(10) : error C2258: illegal pure syntax, must be '= 0'
c:\documents and settings\administrator\my ……
[/Quote]
1. error C2252: 'REPEAT_INFINITE' : pure specifier can only be specified for functions
看来vc6不支持非0的static const常量初始化,简单的改法是:
#define REPEAT_INFINITE 3

2. error C2039: 'isspace' : is not a member of 'std'
应该是vc6没把isspace函数放在namespace std里,只能找找在哪里,修改一下了。

3. error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
呃~,如果是我,我就换个编译器。

后面的错误我也看不出来什么原因,不过引用别人的一句话:
珍惜生命,远离vc6.0
tearmap 2011-10-02
  • 打赏
  • 举报
回复
Compiling...
main.cpp
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring.h(10) : error C2258: illegal pure syntax, must be '= 0'
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring.h(10) : error C2252: 'REPEAT_INFINITE' : pure specifier can only be specified for functions
C:\Documents and Settings\Administrator\My Documents\VC6.0\main\main.cpp(20) : error C2039: 'isspace' : is not a member of 'std'
C:\Documents and Settings\Administrator\My Documents\VC6.0\main\main.cpp(22) : error C2039: 'isspace' : is not a member of 'std'
C:\Documents and Settings\Administrator\My Documents\VC6.0\main\main.cpp(53) : error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
regxstring.cpp
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring.cpp(44) : fatal error C1010: unexpected end of file while looking for precompiled header directive
regxstring_impl.cpp
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring_impl.cpp(26) : warning C4005: '_OSS_OUT' : macro redefinition
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring_impl.cpp(23) : see previous definition of '_OSS_OUT'
c:\documents and settings\administrator\my documents\vc6.0\main\regxstring_impl.cpp(937) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Generating Code...
执行 cl.exe 时出错.

main.exe - 1 error(s), 0 warning(s)



怎么调试……用的vc6.0
tearmap 2011-10-02
  • 打赏
  • 举报
回复
大牛,正想找这东西。十分感谢您的辛勤劳动!!
  • 打赏
  • 举报
回复
支持!
daidodo 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 lubobill1990 的回复:]

真的是一个很好很好的想法,我在做一个软件测试的项目,遇到string的话要随机生成字符串,正好也想写一个相同的东西,楼主真是太棒了!
只是在visual studio2010编译regxstring.cpp的时候会报错,如下:
===============================================================================……
[/Quote]
我手上没有vs2010,不过从错误信息看,似乎是“(__NodeBase *)0”的问题,可以改为“reinterpret_cast<__NodeBase *>(0)”试试。
bawgiitx 2011-06-09
  • 打赏
  • 举报
回复

//cpp
#include "RandomString.h"
#include "regxstring.h"
#include <math.h>
#include <stdio.h>
#include <string.h>


jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}

JNIEXPORT jstring JNICALL Java_RandomString_getString
(JNIEnv *env, jclass jcl, jstring s){
const char* szStr=(env)->GetStringUTFChars(s,0);//两个参数
//printf("string=[%s]",szStr);
CRegxString regxstr;
regxstr.ParseRegx(szStr);
return stoJstring(env,regxstr.RandString());
}

public class RandomString {
public static native String getString(String rex);

static {
System.loadLibrary("lib/RandomString");
}

public static void main(String[] args) {
for (int i = 0; i < 100; i++)
System.out.println(getString("[01]?[0-9][:][0-5]?[0-9]|[2]?[0-3][:][0-5]?[0-9]"));
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
3:07
3:07
3:07
3:07
3:07
3:07
3:07
3:07
3:07
3:07
3:07
3:07
...全重复了
*/

感觉是jni的问题,不知道要怎么解决
bawgiitx 2011-06-09
  • 打赏
  • 举报
回复
编译成dll后
java调用dll时,100条有时全重复,有时只有二个不重复
有人遇到过没,要怎么解决
加载更多回复(26)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧