本文将为您提供关于linuxC中使用正则表达式的详细介绍,我们还将为您解释转的相关知识,同时,我们还将为您提供关于25、MySQL中使用正则表达式、arch-linux–ArchLinux64bitA
本文将为您提供关于linux C 中使用正则表达式的详细介绍,我们还将为您解释转的相关知识,同时,我们还将为您提供关于25、MySQL 中使用正则表达式、arch-linux – Arch Linux 64bit Android ADB?、arch-linux – 在Android设备上启动原生Arch Linux、Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报的实用信息。
本文目录一览:- linux C 中使用正则表达式(转)(linux cp 正则)
- 25、MySQL 中使用正则表达式
- arch-linux – Arch Linux 64bit Android ADB?
- arch-linux – 在Android设备上启动原生Arch Linux
- Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报
linux C 中使用正则表达式(转)(linux cp 正则)
- #include <stdio.h>
- #include <sys/types.h>
- #include <regex.h>
- /* 取子串的函数 */
- static char* substr(const char*str, unsigned start, unsigned end)
- {
- unsigned n = end - start;
- static char stbuf[256];
- strncpy(stbuf, str + start, n);
- stbuf[n] = 0;
- return stbuf;
- }
- /* 主程序 */
- int main(int argc, char** argv)
- {
- char * pattern;
- int x, z, lno = 0, cflags = REG_EXTENDED;
- char ebuf[128], lbuf[256];
- char *st=NULL;
- regex_t reg;
- regmatch_t pm[10];
- const size_t nmatch = 10;
- /* 编译正则表达式*/
- pattern = argv[1];
- z = regcomp(®, pattern, cflags);
- if (z != 0){
- regerror(z, ®, ebuf, sizeof(ebuf));
- fprintf(stderr, "%s: pattern ''%s'' \n", ebuf, pattern);
- return 1;
- }
- /* 逐行处理输入的数据 */
- while(fgets(lbuf, sizeof(lbuf), stdin)) {
- ++lno;
- if ((z = strlen(lbuf)) > 0 && lbuf[z-1] == ''\n'')
- lbuf[z - 1] = 0;
- /* 对每一行应用正则表达式进行匹配 */
- st = lbuf;
- x = 0;
- while( st && regexec(®, st, 1, pm, 0) != REG_NOMATCH )
- {
- if(x==0) printf("%04d: %s\n", lno, lbuf);
- printf(" $%d=''%s''\n", x, substr(st, pm[0].rm_so, pm[0].rm_eo));
- st += pm[0].rm_eo;
- x++;
- }
- }
- /* 释放正则表达式 */
- regfree(®);
- return 0;
- }
$ gcc -o regex regex.c
生成可执行文件 regex,然后匹配regex.c文件中的"char"字符串的测试如下:
$ regex "char" < regex.c
0006: static char* substr(const char*str, unsigned start, unsigned end)
$0=''char''
$1=''char''
0009: static char stbuf[256];
$0=''char''
0015: int main(int argc, char** argv)
$0=''char''
0017: char * pattern;
$0=''char''
0019: char ebuf[128], lbuf[256];
$0=''char''
0020: char *st=NULL;
$0=''char''
正则表达式定义
正则表达式(regular expression)是Linux系统中一种非常重要的字符串搜索模式,是一组规则字符的集合。这些规则字符能够组成我们所需要的搜索规则,效率高、功能强,可以极大地简化处理字符串时的复杂度。在很多Linux工具(sed、grep、find等)和脚本语言(awk、perl等)中都有着重要的地位。当我们在编写字符串相关的应用程序时,掌握正则表达式会起到事半功倍的效果。
C中的正则表达式
标准C和C++都不支持正则表达式,但是千万不要以为正则表达式就只是Perl、Python、Bash等脚本语言的专利,作为C语言程序员,用户同样可以在自己的程序中运用正则表达式,只是需要一些函数库辅助C/C++程序员来完成这一功能。许多Linux发行版本都带有POSIX函数库,下面我将以POSIX函数库中的Regex系列函数来说明在Linux c下如何使用正则表达式。
首先要用Regcomp()函数对它进行编译,将其转化为Regex_t结构。因为一个正则表达式需要编译成一个特定的数据结构才能被后续的函数使用。Regcomp()函数的原型是:
int Regcomp(regex_t *preg, const char *regex, int cflags)
参数preg指向一个声明为regex_t的数据结构,用来保存编译结果。参数regex为要编译的正则表达式字符串。参数cflags是编译开关,编译开关可以控制规则生成的特性,如REG_EXTEND代表使用扩展正则表达式模式;REG_ICASE表示对规则中字符串不区分大小写;REG_NOSUB只检查是否有符合规则的子串。
下面匹配正则表达式,一旦用Regcomp()函数成功地编译了正则表达式,接下来就可调用regexec()函数完成模式匹配。Regexec()函数的原型:
int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags)
函数用于在字符串(参数string)中匹配正则表达式(参数preg)。而参数nmatch和pmatch则用于把匹配结果返回给调用程序。在调用函数egexec()进行模式匹配的过程中,可能在字符串string中会有多处与给定的正则表达式相匹配。参数pmatch用来保存这些匹配位置。参数nmatch则告诉函数regexec()最多可以把多少个匹配结果填充到pmatch数组中。
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
其中rm_so表示满足规则的子串在string中的起始偏移量,rm_eo表示满足规则的子串在string中的后续偏移量。当regexec成功返回时,从pmatch[0].rm_so到pmatch[0].rm_eo是第一个匹配的字符串。最后一个参数eflags决定了匹配的特性,当需要匹配的string非常大的时候可以通过eflags来表示是否是第一行(REG_NOTBOL),或最后一行(REG_NOTEOL)。
还有一个函数是用来获取错误信息的,size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)。参数errcode是来自函数Regcomp()或regexec()的错误代码,而参数preg则是由函数Regcomp()得到的编译结果,其目的是把格式化消息所必须的上下文提供给regerror()函数。在执行函数regerror()时,将按照参数errbuf_size指明的最大字节数。在errbuf缓冲区中填入格式化后的错误信息,同时返回错误信息的长度。
最后释放正则表达式。无论什么时候,当不再需要已经编译过的正则表达式时,都应该调用函数regfree()将其释放,以免产生内存泄漏。void regfree(regex_t *preg); 函数regfree()不会返回任何结果,它仅接收一个指向regex_t数据类型的指针,这是之前调用Regcomp()函数所得到的编译结果。
编译正则表达式函数
#include <sys/types.h>
#include <regex.h>
int regcomp(regex_t *preg, const char *pattern, int cflags)
typedef struct{
int reg_magic;
size_t re_nsub;
const char *re_endp''
struct re_guts *re_g;
} regex_t;
pattern 正则表达式字符串
preg regex_t类型的结构变量, 调用放置编译结果的地方
cflags 下面一外或多个进行"或"操作的位掩码
REG_EXTENDED 使用POSIX延伸表示语法,否则使用POSIX基本语法
REG_NOSPEC 禁用所有的元字符,即不认为模式字符具有特殊意义
REG_ICASE 忽略大小写
REG_NOSUB 忽略参数nmatch和pmatch
REG_NEWLINE 不对特殊字符进行比较如^ . * ? + | / [ ] ( ) < >和$
REG_PEND 编译模式,在遇到第一个空字节时,正则表达式不会结束,正则表达式将在preg->re_endp指向的字节之前结束。 这就允许正则表达式中引入空字节
.正则表达式错误, 用来取得regcomp()或regexec()的错误原因
/**
* errorcode 为由regcomp()或regexec()返回的错误代码
* preg 指向pattern buffer的结构指针
* errbuf 指向欲存放错误字符串的缓冲区, errbuf_size为缓冲区大小
*
* 返回错误字符串的长度
*/
#include <sys/types.h>
#include <regex.h>
size_t regerror(int errorcode, const regex_t *preg,
char *errbuf, size_t errbuf_size);
.匹配正则表达式
#include <sys/types.h>
#include <regex.h>
/*
* 成功返回0
* 失败返回错误代码
*/
int regexec(const regex_t *preg, //指针,指向以前编译过的而且由regcomp(3)函数初始化的正则表达式
const char *string, //要匹配的字符串
size_t nmatch, //和pmatch把参数用于把匹配的模式返回给调用程序
regmatch_t pmatch[],
int eflags); //包含由0个或以上标志的"或"操作 (REG_NOTBO, REG_NOTEOL, REG_STARTEND)
typedef struct{
regoff_t rm_so; //符合条件的开始位置,如果值为-1,则代表此结构并未让regexec()使用
regoff_t rm_eo; //符合条件的结束位置 end of match offset
} regmatch_t;
参数eflags有两种可能,可使用OR(|)组合:
REG_NOTBOL 让特殊字符^无作用
REG_NOTEOL 让特殊字符$无作用
.释放正则表达式
#include <sys/types.h>
#include <regex.h>
void regfree(regex_t *preg);
释放regcomp已经编译的正则表达式
.示例
int z; //Error code
regex_t reg; //Compiled regexpr
char ebuf[128]; //Error message buffer
z = regcomp(®, pattern, REG_EXTENDED);
if(z != 0 )
{
regerror(z, ®, buf, sizeof(ebuf));
printf("%s: regcomp(3)/n", ebuf);
exit(1);
}
//.....
regfree(®);
25、MySQL 中使用正则表达式
使用REGEXP正则表达式查询
以 student 表为例,使用正则表达式查询出姓王的教师:
SELECT * FROM student WHERE name REGEXP '^王';
name REGEXP '^王'
表示选择以王开头的数据
使用正则表达式查询 name 字段中包含小字的数据:
SELECT * FROM student WHERE name REGEXP '小';
以 teacher 表为例,使用正则表达式匹配符合邮箱格式的数据:
SELECT * FROM teacher WHERE email REGEXP '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$';
常用正则表达式
11手机号正则表达式:
^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$
域名网址正则表达式
^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$
日期+时间正则表达式
^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$
参考资料:http://www.jb51.cc/wiki/mysqllesson/mysqlre.html
arch-linux – Arch Linux 64bit Android ADB?
我试图在Arch Linux 64bit上使用Android SDK,但是当我尝试从正确的目录运行ADB时,它说文件不存在,但它就在那里.在你遇到这个问题的Ubuntu上安装ia32-lib但是在Arch Linux中没有.有什么我必须做的.
解决方法:
“无此类文件或目录”消息实际上是指32位可执行文件的加载程序,这是执行32位可执行文件所必需的.有关更详细的说明,请参阅Getting “Not found” message when running a 32-bit binary on a 64-bit system.您需要在Arch Linux上安装32位支持.
遗憾的是,Arch Linux没有一种简单的方法来安装32位支持.目前,您需要通过将这些行添加到pacman.conf来启用[multilib]存储库:
[multilib]
Include = /etc/pacman.d/mirrorlist
有关详细信息,请参阅Wiki上的Arch64 FAQ和Using 32-bit-applications on Arch64.
arch-linux – 在Android设备上启动原生Arch Linux
我有一个galaxy Note 10.1(n8010),我想让它本地启动Arch Linux.我的意思是启动Arch Linux而不是android.我需要的只是改变initramfs,这是我在世界上任何地方都找不到的.我的问题:
>我是否只需要更改initramfs,或者我还需要处理其他事情? (比如内核本身)
> [DONE]我在哪里获得CyanogenMod 10.1的官方initramfs(也许是github)?或者我必须自编译CyanogenMod的内核并从zImage中提取它?
> [可能]我可以在Android数据分区中安装Arch linux root吗? (例如/ data / linux)或者我必须购买SD卡?
>我还需要知道/做什么?
编辑:我发现如何更改initramfs
Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报
开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习、修改,甚至是重新分发。关注「开源日报」,一文速览国内外开源大事件吧!
一分钟速览新闻点!
- SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux
- Bootstrap 创始人 Mark otto 谈及自己生病
- 欧盟委员会开源计划办公室启动漏洞赏金
- Google 在 Windows 上发布 beta 版本的 Google Play Games app
- Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核
- 基于 Chromium 项目的微软 Edge 浏览器大变更
- JetBrains 提供面向开发人员的免费开源字体 Mono
开源大新闻
SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux
自从 2020 年红帽宣布终止 CentOS Linux 的支持,并用 CentOS Stream 取而代之后,RHEL 的替代品便相继涌现。知名 Linux 发行套件供应商 SUSE 带来了全新的 SUSE Liberty Linux 产品。据官方介绍,借助 SUSE Liberty Linux,用户可以通过经过验证的可选管理工具获得值得信赖的支持,这些工具针对混合 Linux 环境进行了优化,包括 Red Hat Enterprise Linux 、CentOS 以及用户所期望的 openSUSE 和 SUSE Linux Enterprise Server。而在一定程度上来看,Liberty Linux 等同于当前的 Red Hat 版本——RHEL 8.5 ,并且与来自 Red Hat 自己的 EPEL 存储库的软件包兼容。
Bootstrap 创始人 Mark otto 谈及自己生病
1 月 20 日,Bootstrap 创始人 Mark otto 发文表示,“2021 年 12 月 5 日,我的心脏病发作,在医院住了两个星期。第一周,我在重症监护室里处于医学上的昏迷状态,以冷冻的方式保存我身心。没有人知道当我醒来时,我是否还是我。”
幸运的是,一周之后,Mark otto 苏醒过来,分享道“好消息是我的心脏有一个新支架,而且我恢复得很好。我一直在慢慢地重新使用 Bootstrap 以确保我仍然可以设计和编码(我可以!),现在我会在网上逗留一段时间后下班休息。”同时,他也希望通过此事能够让更多的人关注自己的健康,“多和你的医生交谈、做更多的检查、了解遗传病史、锻炼身体,尽可能地保持安全和健康。虽然这有些陈词滥调,但它可以很好地挽救你的生命。”
Bootstrap是一个基于 HTML、CSS、JavaScript 的简洁灵活的网站前端框架及组件包,它也是 GitHub 上面 star 次数排名第十二的项目。Star 次数超过 155,000。
欧盟委员会开源计划办公室启动漏洞赏金
欧盟委员会开源计划办公室(EC OSPO)的一组新的漏洞赏金于 1 月 13 日启动,使用 Intigriti 漏洞赏金平台。其中,欧盟委员会开源计划办公室(EC OSPO)总共资助了200,000 欧元,用于再次关注公共服务广泛使用的开源软件的安全性。如在 LibreOffice、LEOS、Mastodon、odoo 和 CryptPad(欧盟公共服务部门使用的开源解决方案)中发现安全漏洞的奖励最高可达 5000 欧元。为他们发现的错误提供代码修复有 20% 的奖金。
Google 在 Windows 上发布 beta 版本的 Google Play Games app
Google 上个月透露要将 Android 游戏带到所有 Windows 平台。现在它正式释出了 beta 版本的 Google Play Games app,目前只对部分地区开放测试。Google 称,Google Play Games app 允许用户在 Windows 台式机或笔记本电脑上浏览、下载和玩部分手游,支持使用键盘和鼠标、在设备之间无缝同步以及与 Google Play Points 集成。该应用暂不支持 Mac。系统要求 Windows 10(v2004),8GB 内存,固态硬盘,20 GB 储存空间,8 核处理器,游戏类显卡(目前市场上的中低端显卡都支持),启用硬件虚拟化。
开源软件专区
Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核
多年来,Linux 内核支持多种 sanitizers、内存泄漏检测器等功能,这些功能主要用于帮助诊断和解决内核中的缺陷。然而,所有这些调试优化的功能并没有集中在一起,这使系统管理员和开发者在手动配置内核构建时,难以发现这些众多的功能。现在,随着 Linux 5.17 的推出,这种情况正在改变。
Linux 5.17 所做的是引入 debug.config 作为默认的内核构建配置,为调试进行优化。debug.config 将默认启用各种功能,如内核地址消毒器、未定义行为消毒器、KMemLeak,以及许多其他随着时间推移而增加的内核功能,旨在帮助调试或追踪内核问题。因此,只要一个命令,就可以得到官方推荐的内核配置,并启用许多不同的调试功能。
基于 Chromium 项目的微软 Edge 浏览器大变更
近日,微软宣布,从 Edge 96 版本开始,Web 应用将能够在浏览器中使用协议处理程序。最新功能将允许已安装的 Web 应用程序(或 PWA)导航预设或自定义协议。已安装的 Web 应用程序也将能够向操作系统注册为协议处理程序,并在调用特定协议后启动。换句话说,用户可以将网页设置为默认处理程序,比如用户想创建电子邮件,系统将默认打开浏览器中的某个网站。
此外,开发者可以通过注册以 web+ 为前缀的协议来生成 Web 应用程序自定义方案。协议处理程序可用于 Web 应用通信,其中一个应用直接调用另一个应用并通过自定义协议链接传递数据。(小编)
开源工具推荐
JetBrains 提供面向开发人员的免费开源字体 Mono
JetBrains 于近日开源 Mono 字体,其可以作为独立下载提供,并且还被捆绑在所有JetBrains IDE 中。JetBrains Mono 的默认版本带有 OpenType 功能和连字(始终可以在设置中打开和关闭)。如果有开发者的 IDE 不支持 OpenType,也可以使用该字体的特殊版本 — JetBrains Mono NL,其中不包含任何连字。
《新程序员003》正式上市,50 余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等 30 多家知名公司云原生和数字化一手实战经验!
订阅地址:https://mall.csdn.net/item/92470?utm_source=csdn_news_group
总结
以上是小编为你收集整理的Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://blog.csdn.net/csdnopensource/article/details/122615511
关于linux C 中使用正则表达式和转的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于25、MySQL 中使用正则表达式、arch-linux – Arch Linux 64bit Android ADB?、arch-linux – 在Android设备上启动原生Arch Linux、Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报等相关知识的信息别忘了在本站进行查找喔。
本文标签: