正则表达式(转载)

2023-05-16

正则表达式的基本语法

开始和结尾位置声明

  • ​^​​ 表示字符串的开始,要匹配 ​​^​​ 本身需要使用 ​​\^​​ ,例如:​​^Yao​​ 表示字符串以 ​​Yao​​ 开头
  • ​$​​ 表示字符串的结尾,要匹配 ​​$​​ 本身需要使用 ​​\$​​ ,例如:​​Yao$​​ 表示字符串以 ​​Yao​​ 结尾

字母和数字表示

  • ​\w​​ 表示匹配任意字母、数字、下划线
  • ​\W​​ 表示匹配任意不是字母、数字、下划线的字符
  • ​\d​​ 表示匹配任意单个数字,0~9 中任意一个,等价于 ​​[0-9]​
  • ​\D​​ 表示匹配任意非数字,等价于 ​​[^0-9]​
  • ​[[:alpha:]]​​ 表示匹配任何字母
  • ​[[:alnum:]]​​ 表示匹配任何字母和数字

特殊字符的表示

  • ​.​​ 表示匹配除换行外任意的字符
  • ​|​​ 表示两个匹配条件进行逻辑或运算
  • ​\​​ 表示将一个字符标记为特殊字符、文本、反向引用或八进制转义符
  • ​\s​​ 表示匹配任意空白符(空格,制表符,换页符)
  • ​\S​​ 表示匹配任意不是空白符的字符
  • ​\f​​:匹配一个换页符,等价于​​\x0c​​和​​\cL​
  • ​\n​​:匹配一个换行符,等价于​​\x0a​​和​​\cJ​
  • ​\r​​:匹配一个回车符,等价于​​\x0d​​和​​\cM​
  • ​\t​​:匹配一个制表符,等价于​​\x09​​和​​\cI​
  • ​\v​​:匹配一个垂直制表符,等价于​​\x0b​​和​​\cK​
  • ​\b​​:匹配一个字边界,即字与空格间的位置,也就是单词和空格之间的位置,不匹配任何字符,如,​​er\b​​匹配​​never​​中的​​er​​,但不匹配​​verb​​中的​​er​
  • ​\B​​: 非字边界匹配,​​er\B​​匹配​​verb​​中的​​er​​,但不匹配​​never​​中的​​er​

重复次数

  • ​{n}​​ 表示正好匹配 n 次
  • ​{n,}​​ 表示至少匹配 n 次
  • ​{n,m}​​ 表示匹配 n~m 次
  • ​*​​ 表示匹配0次或多次,等价于 ​​{0,}​
  • ​?​​ 表示匹配至多1次可以是0次,等价于 ​​{0,1}​
  • ​+​​ 表示匹配至少匹配一次,等价于 ​​{1,}​

集合与补集

  • ​[]​​ 表示一个字符集合,可以使用 ​​-​​ 表示一个范围,例如 ​​[0-9]​​ 表示 ​​0~9​​ 十个数字的集合
  • ​[^]​​ 表示补集,例如 ​​[^7-9]​​ 表示除 7,8,9 以外的数字(0,1,2,3,4,5,6)

分组

  • ​()​​ 表示分组,​​|​​ 表示或,例如:·​​(cpp|cxx)​

正则表达式库

  • C++ 正则表达式库(RE 库)是新标准库的一部分,RE库定义在头文件 regex 中。
  • regex 中包含的组件:

组件

说明

regex

表示有一个正则表达式的类

regex_match

将一个字符序列与一个正则表达式匹配

regex_search

寻找第一个与正则表达式匹配的子序列

regex_replace

使用给定的格式替换一个正则表达式

sregex_iterator

迭代器适配器,调用 regex_search 来遍历一个 string 中所有匹配的子串

smatch

容器类,保存在 string 中的搜索结果

ssub_match

string 中匹配的子表达式的结果

regex

regex 的构造

  • regex r(re)
  • regex r(re,f)

说明:

  • re 表示一个正则表达式,可以是一个string、一个表示字符范围的迭代器对、一个指向空字符结尾的字符数组的指针、一个字符指针、一个计数器、一个花括号包围的字符列表。
  • f 指明对象如何处理的标志,默认为 ECMAScript。可选的标志包括:
  • icase :在匹配过程中忽略大小写。
  • nosubs:不保存匹配的子表达式。
  • optimize:执行速度优于构造速度。
  • ECMAScript:使用 ECMA-262 指定的语法。
  • basic:使用 POSIX 基本的正则表达式语法。
  • extended:使用 POSIX 扩展的正则表达式语法。
  • awk:使用 POSIX 版本的 awk 语言的语法。
  • grep:使用 POSIX 版本的 grep 的语法。
  • egrep:使用 POSIX 版本的 egrep 的语法。

regex 赋值

操作

说明

r1 = re

将 r1 中的正则表达式替换为 re。

r1.assign(re,f)

与使用赋值运算符 = 效果相同,可选的标志 f 也与 regex 的构造函数中对应的参数含义相同。

构造函数和赋值操作可能抛出 regex_error 的异常。

regex 的其它操作

操作

说明

r.mark_count()

r 中子表达式的数目

r.flags()

返回 r 的标志集

当编写的正则表达式存在错误时,运行时标准库会抛出一个类型为 regex_error 的异常:

  • regex_error 的 what 操作描述发生了什么错误。
  • regex_error 的 code 成员用来返回某个错误类型对应的数值编码。

RE 库可以抛出的标准错误如下表所示,编译器定义了 code 成员,编号从 0 开始:

错误类型

说明

error_collate

无效的元素校对请求

error_ctype

无效的字符类

error_escape

无效的转义字符或无效的尾置转义

error_backref

无效的向后引用

error_brack

不匹配的方括号[]

error_paren

不匹配的小括号()

error_brace

不匹配的花括号{}

error_badbrace

{}中无效的范围

error_range

无效的字符范围[z-a]

error_space

内存不足,无法处理此正则表达式

error_badrepeat

重复字符(*,?,+,{)之前没有有效的正则表达式

error_complexity

要求的匹配过于复杂

error_stack

栈空间不足,无法处理匹配


  
    try
    {
        regex r("[[:alnum:]+\\.(cpp|cxx|cc)$",regex::icase);
    }
    catch (regex_error e)
    { 
        cout << e.what() << "\ncode:" << e.code() << endl; 
    }
regex_error(error_brack): The expression contained mismatched [ and ].
code:4

 

避免创建不必要的正则表达式

  • 正则表达式所表示的程序是在运行时编译的而非编译时编译的。
  • 正则表达式的编译是一个非常慢的动作,为了减少开销,应该避免创建不必要的 regex,特别地,如果在一个循环中使用了正则表达式,应该在循环外创建它,而不是每步迭代时都编译它。

正则表达式类和输入序列类型

输入类型

正则表达式类

string

regex、smatch、ssub_match、sregex_iterator

const char*

regex、cmatch、csub_match、cregex_iterator

wstring

wregex、wsmatch、wssub_match、wsregex_iterator

const wchar_t*

wregex、wcmatch、wcsub_match、wcregex_iterator


  
regex r("[[:alnum:]]+\\.(cpp|cxx|cc)$", regex::icase);
smatch results;
if (regex_search("myfile.cc", results, r)) //@ 错误,输入为char*
cout << results.str() << endl;

如果想搜索一个字符数组,就必须使用 cmatch 对象:

regex r("[[:alnum:]]+\\.(cpp|cxx|cc)$", regex::icase);
cmatch results;
if (regex_search("myfile.cc", results, r)) //@ 错误,输入为char*
cout << results.str() << endl;

regex_search、regex_match

regex_search、regex_match 的参数

regex_search 和 regex_match 的参数类型可以是:

  • (seq,m,r,mft)
  • (seq,r,mft)

说明:

  • 返回值都是 bool 类型,表示是否找到匹配。
  • seq 表示字符序列,可以是一个string、表示范围的一对迭代器、指向空字符结尾的字符数组指针。
  • m 是一个 match 对象,用来保存匹配结果的相关细节,match 和 seq 必须是兼容的类型。
  • mft 是一个可选的 regex_constants::match_flag_type 值,它们将影响匹配过程。

匹配与 Regex 迭代器类型

regex 迭代器是一种迭代器适配器,被绑定到一个输入序列和一个 regex 对象上。

sregex_iterator、cregex_iterator、wsregex_iterator、wcregex_iterator 操作:

操作

说明

sregex_iterator it(b,e,r);

一个 sregex_iterator,遍历迭代器 b 和 e 表示的string。它调用 sregex_search(b,e,r) 将 it 定位到输入中第一个匹配的位置。

sregex_iterator end;

sregex_iterator 的尾后迭代器。

*it

根据最后调用 regex_search 的结果,返回一个 smatch 对象的引用。

it->

根据最后调用 regex_search 的结果,返回一个指向 smatch 对象的指针。

++it

从输入序列当前匹配位置开始调用 regex_search。返回递增后迭代器。

it++

从输入序列当前匹配位置开始调用 regex_search。返回旧值。

it1 == it2

如果两个 sregex_iterator 都是尾后迭代器,则它们相等;两个非尾后迭代器是从相同的输入序列和 regex 对象构造,则它们相等。。

it1 != it2

当 sregex_iterator 绑定到一个 string 和一个 regex 对象时,迭代器自动定位到给定的 string 中第一个匹配位置。即,sregex_iterator 构造函数对给定的 string 和 regex 调用 regex_search。当我们解引用迭代器时,会得到一个对应最近一次搜索结果的 smatch 对象。当我们递增迭代器时,它调用 regex_search 在输入 string 中查找下一个匹配。

string test_str = "freind white receipt receive theif";
string pattern("[^c]ei");
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern,regex::icase);
for (sregex_iterator it(test_str.begin(), test_str.end(), r), end_it;
it != end_it; ++it)
cout << it->str() << endl;

smatch 操作

这些操作也适用于 cmatch、wsmatch、wcmatch 和对应的 csub_match、wssub_match、wsub_match:

操作

说明

m.ready()

如果已经通过调用 regex_search 或 regex_match 设置了m,则返回 true;否则返回 false。如果 ready 返回 false,则对 m 进行操作是未定义的

m.size()

如果匹配失败,则返回0;否则返回最近一次匹配的正则表达式中子表达式的数目

m.empty()

若 m.size()为0,则返回true

m.prefix()

一个ssub_match对象,表示当前匹配之前的序列

m.suffix()

一个ssub_match对象,表示当前匹配之后的序列

m.format(...)

m.length(n)

第n个匹配的子表达式的大小

m.position(n)

第n个子表达式矩序列开始的距离

m.str(n)

第n个子表达式匹配的string

m[n]

对应第n个子表达式的ssub_match对象

m.begin(),m.end()

表示m中sub_match元素范围的迭代器

m.cbegin(),m.cend()

表示m中sub_match元素范围的迭代器,cbegin,cend 返回const_iterator

子匹配操作

这些操作适用于 ssub_match、csub_match、wssub_match、wcsub_match:

操作

说明

matched

一个 public bool 成员,指出此 ssub_match 是否匹配了

first

public 数据成员,指向匹配序列首元素的迭代器。

second

public 数据成员,指向匹配序列尾后位置的迭代器,如果未匹配,则 first 和 second 是相等的。

length()

匹配的大小,如果 matched 为 false,则返回0 。

str()

返回一个包含输入中匹配部分的 string,如果 matched 为 false,则返回空 string。

s=ssub

将 ssub_match 对象 ssub 转化为 string 对象 s。等价于 s=ssub.str()。转换运算符不是 explicit 的。

regex_replace

正则表达式替换操作:

  • m.format(dest,fmt,mft)
  • m.format(fmt,mft)

说明:

  • fmt,生成格式化输出,可以是一个 string,也可以是一个指向空字符结尾的字符数组的指针。
  • mft,match_flag_type,默认值为 format_default。
  • 第一个版本写入迭代器 dest 指向的目的位置;第二个版本返回一个 string 。

在输入序列中查找并替换一个正则表达时,可以调用 regex_replace。

  • regex_replace(dest,seq,r,fmt,mft)
  • regex_replace(seq,r,fmt,mft)

说明:

  • 遍历 seq,用 regex_search 查找与 regex 对象 r 匹配的子串。
  • 使用格式字符串 fmt 和可选的 match_flag_type 标志来生成输出。
  • 第一个版本将输出写入到指定的迭代器 dest 指定的位置,并接受一对 seq 表示范围。第二个版本返回一个 string,保存输出。
  • seq、fmt 都既可以是 string 类型,也可以是一个空字符结尾的字符数组的指针。
  • mft 的默认值为 match_default。

匹配标志

标志

说明

match_default

等价于 format_default

match_not_bol

不将首字符作为行首处理

match_not_eol

不将尾字符作为行尾处理

match_not_bow

不将首字符作为单词首处理

match_ot_eow

不将尾字符作为单词尾处理

match_any

如果存在多于一个匹配,则返回任意一个匹配

match_not_null

不匹配任何空序列

match_continus

匹配必须从输入的首字符开始

match_prev_avail

输入序列包含第一个匹配之前的内容

format_default

用 ECMAScript 规则替换字符串

format_sed

用 POSIX sed 规则替换字符串

format_no_copy

不输出输入序列中未匹配的部分

format_first_only

只替换子表达会的第一次出现

示例

regex_match

void test_regex_match()
{
  string pattern{"\\d{3}-\\d{8}|\\d{4}-\\d{7}"}; //@ phone number
  vector<string> str{ "010-12345678","0411-1234567","021-12345678","0100-12345678" };
  try{
    regex re(pattern);

    for (auto tmp : str)
    {
      if (regex_match(tmp, re))
        cout << tmp << " matched" << endl;
      else
        cout << tmp << " unmatched" << endl;
    }
  }
  catch(regex_error e)
  { 
    cout << e.what() <<"\ncode:"<<e.code() << endl; 
  }
}

regex_search

void test_regex_search()
{
  string pattern{"^http|https://\\w*$"}; //@ url
  vector<std::string> str{ "http://www.baidu.com", "https://www.baidu.com",
    "abcd://124.456", "abcd http://www.baidu.com 123" };

  try {
    regex re(pattern);

    for (auto tmp : str)
    {
      if (regex_search(tmp, re))
        cout << tmp << " can serach" << endl;
      else
        cout << tmp << " can not serach" << endl;
    }
  }
  catch (regex_error e)
  {
    cout << e.what() << "\ncode:" << e.code() << endl;
  }
}
void test_regex_search2()
{
  string pattern{ "[a-zA-z]+://[^\\s]*" };  //@ url
  string str{ "baidu addr is: http://www.baidu.com , google addr is: https://www.google.com " };

  smatch results;
  try {
    regex re(pattern);
    while (regex_search(str, results, re))
    {
      for (auto s : results)
        cout << s << endl;
      str = results.suffix().str();
    }
  }
  catch (regex_error e)
  {
    cout << e.what() << "\ncode:" << e.code() << endl;
  } 
}

regex_replace

 

void test_regex_replace()
{
  string pattern{ "\\d{18}|\\d{17}X" }; //@ id card
  vector<std::string> str{ "123456789012345678", "abcd123456789012345678efgh",
    "abcdefbg", "12345678901234567X" };
  string fmt{ "********" };
    
  try {
    regex re(pattern);
    for (auto tmp : str)
    {
      string res = regex_replace(tmp, re, fmt);
      cout << "src:" << tmp << " " << "ret:" << res << endl;
    }
  }
  catch (regex_error e)
  {
    cout << e.what() << "\ncode:" << e.code() << endl;
  }
}
int test_regex_replace2()
{
    std::string s("there is a subsequence in the string\n");
    std::regex e("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

                                       // using string/c-string (3) version:
    std::cout << std::regex_replace(s, e, "sub-$2");

    // using range/c-string (6) version:
    std::string result;
    std::regex_replace(std::back_inserter(result), s.begin(), s.end(), e, "$2");
    std::cout << result;

    // with flags:
    std::cout << std::regex_replace(s, e, "$1 and $2", std::regex_constants::format_no_copy);
    std::cout << std::endl;

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式(转载) 的相关文章

  • Linux 文本处理工具

    一 Linux 及Unix平台 sed awk grep 这三个工具都要用到正则表达式 把常用贴出来 1 行的匹配 root mypc sed n 2p etc passwd 打印出第2行 root mypc sed n 1 3p etc
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • 人人都看得懂的正则表达式教程

    编写验证规则最流行和最简单的方法就是正则表达式了 但唯一的一个问题是正则表达式的语法太隐晦了 让人蛋疼无比 很多开发者为了在项目中应用复杂的验证 经常要使用一些小抄来记住正则式的复杂语法和各种常用命令 在这篇文章中 我将试图让大家明白什么是
  • 4.4.5 密码验证(2)

    4 当且仅当含数字和字母的密码验证 如果密码当且仅当包含数字和字母 那么该密码的强度是中等强度 当然 它的安全性一般 以下正则表达式能够验证当且仅当包含数字和字母的密码 da zA Z d a zA Z da zA Z 74 正则表达式 7
  • QT QStringList 用法

    QStringList类提供了一个字符串列表从QList
  • JavaScript最后分水岭——正则表达式

    个人简介 个人主页 微风洋洋 博客领域 编程基础 后端 写作风格 干货 干货 还是tmd的干货 精选专栏 JavaScript 支持洋锅 点赞 收藏 留言 好久不见 甚是想念 大家好 我是微风洋洋 也可以叫我洋锅 细心地小伙伴可能已经发现
  • 爬虫入门_3:数据解析及案例实战

    聚焦爬取 爬取页面中指定的页面内容 编码流程 指定url 发起请求 获取响应数据 数据解析 持久化存储 数据解析分类 正则 re M 多行匹配 re S 单行匹配 bs4 xpath 数据解析原理概述 解析的局部的文本内容都会在标签之间或者
  • 正则实现去除字符串前后空格

    前言 正则去掉字符串前后空格 1 去除左空格 str1是处理后的 let str1 str replace s g 2 去除右空格 str2是处理后的 let str2 str replace s g 3 去除左右空格 let str3 s
  • 使用正则表达式爬虫抓取猫眼电影排行Top100

    目标站点分析 分析网址 首页 https maoyan com 点击榜单 https maoyan com board 点击Top100 https maoyan com board 4 目标站点为 https maoyan com boa
  • test is not a function (js正则表达式匹配问题)

    js中正则表达式匹配时 如果使用test函数 就必须不带引号 并且必须是 定义的规则变量 test 要测试的string 定义变量规则不要带引号 会错误的 如果不使用test 使用match则可以带引号 var re 1 9 d 4 10
  • Java正则校验密码至少包含:字母数字特殊符号中的2种

    一 语法 字符 说明 将下一字符标记为特殊字符 文本 反向引用或八进制转义符 例如 n匹配字符 n n 匹配换行符 序列 匹配 匹配 匹配输入字符串开始的位置 如果设置了 RegExp 对象的 Multiline 属性 还会与 n 或 r
  • 【Linux命令—shell】正则表达式

    正则表达式 regular expression 描述一个字符集合的表达方式 模糊匹配 目录 1 基本正则 2 扩展正则 3 兼容的正则 perl 4 综合案例练习 1 基本正则 演示如下 2 扩展正则 注意 grep不支持扩展正则 如果需
  • 中文姓名、电话、邮箱的正则表达式

    1 中文姓名 如 张三 噶及 洛克业 a zA Z0 9 u4e00 u9fa5 1 10 2 电话验证 如 010 85369999 186199999 0 d 2 3 d 7 8 d 3 5 13 14 15 18 17 d 9 3 电
  • js正则表达式多行匹配

    在js匹配网页内容时 往往需要匹配一段代码比如 div div 中间可能有很多行 这个时候一般 的匹配规则是匹配不出来的 如下介绍一个折中的方法 var content 这里是内容 var re p class s S p gt g var
  • C#中Validating和Validated事件

    您可能经常需要检查用户输入到 Windows 窗体中的信息是否有效 例如 如果您有一个电话号码的 TextBox 控件 则可以检查该控件是否只包含适当的字符 数字 括号和连字符等等 通常 可使用正则表达式验证用户输入的数据 了解Valida
  • Python进阶之CrawlSpider的应用及Scrapy配置项的引用

    1 CrawlSpider的应用 CrawlSpider可以根据规则自动分析链接的数据并按照正则的要求取出需要的数据 scrajpy startproject yg cd yg 注意 t crawl参数 scrapy genspider t
  • java OpenOffice把word转html(Convert word to html )

    1 下载安装OpenOffice 网址http download openoffice org index html 2 下载第三方工具包JODConverter http www artofsolving com opensource j
  • [网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)

    这是作者的系列网络安全自学教程 主要是关于网安工具和实践操作的在线笔记 特分享出来与博友共勉 希望您们喜欢 一起进步 前文分享了Wireshark抓包原理知识 并结合NetworkMiner工具抓取了图像资源和用户名密码 本文将讲解Pyth
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • grep的用法

    命令介绍 Linux系统中grep命令是一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹配的行打印出来 匹配到的标红grep全称是Global Regular Expression Print 表示全局正则表达式版本 它的使用权限

随机推荐

  • VSCode C++环境配置

    VSCode C C 43 43 Windows 环境配置 第一次写博客 xff0c 编程小白 xff0c 码龄不足一年 xff0c 望大家批评改正 废话 许多像我一样的初级码农 xff0c 最开始接触的编程语言可能是C语言 xff0c 学
  • 服务器离线安装GitLab

    服务器离线安装GitLab并还原迁移的数据 1 下载gitlab的离线安装包 xff0c 默认el6 我下载的是el7 xff0c 以下简称el7 rpm 最好不要有openssh的rpm文件 2 登录服务器 xff0c 新建一个文件夹 s
  • leetcode刷题B部分

    目录 文章目录 目录50 Pow x n xff08 回到目录 目录 xff09 54 螺旋矩阵 59 xff08 回到目录 目录 xff09 58 最后一个单词的长度 xff08 回到目录 目录 xff09 59 螺旋矩阵 II 54 x
  • 【Java】字符串列表List<String>数字、字母、汉字混合排序(按中国人使用习惯排序)

    一 概要 本方法根据中国人使用习惯实现了 xff1a 总体按照按数字 字母 汉字升序 xff1b 数字之间按数值大小升序排序 xff1b 字母之间按ascii升序排序 xff1b 汉字之间按拼音升序排序 二 方法入口 span class
  • response.buffer用法

    不知道大家对Buffer了解多少 xff0c 很多人对这个概念都比较模糊 xff0c 尤其是在asp中 很多初学者在编写asp程序时很少用到这条语句 xff0c 下面我就来说说Buffer的用途以及它在asp程序中的作用 一 Buffer
  • 安装office时报错:an error occurred during the installation of assmbly component

    方法一 xff1a 删除office相关注册表 1 开始 xff0d xff0d 运行 xff0d xff0d 输入regedit xff0c 回车打开注册表找HKEY CURRENT USER Software Microsoft Off
  • mysql数据库的备份和恢复

    问题 想从我虚拟机上 xff0c 把数据库移到阿里云服务器上 解决方法 备份数据库 数据库名叫dddd mysqldump u root p span class hljs code 96 dddd 96 span gt dddd sql
  • Xcode如何打包Mac程序为 .dmg镜像文件

    打包Mac程序为 dmg镜像文件 获取可运行程序 按住crtl 43 b 编译程序 xff0c 编译完成之后打开Product文件夹 xff0c 选择编译好的程序 xff0c 鼠标右键点击Show in Finder 创建文件夹 在桌面新建
  • c modern approach chapter 17 中简单的复习

    一 程序remind c用动态内存实现 1 先回顾13 5中remind c的实现 xff0c 如下是自己看书以及自己的体会写成的程序 include lt stdio h gt include lt string h gt include
  • iOS Swift Crash的捕获

    iOS Swift Crash的捕获 crash捕获介绍 如果对crash捕获不太了解 xff0c 可以先参考这篇文章 本文进行Mach异常 43 Unix信号方式捕获crash NSException一般只在OC当中被捕获 xff0c 一
  • 基于TextRank的关键词、短语、摘要提取

    基于TextRank的关键词 短语 摘要提取 原创 2016年09月08日 18 20 59 标签 xff1a TextRank scala 自动文摘 3946 关于自动文摘 利用计算机将大量的文本进行处理 xff0c 产生简洁 精炼内容的
  • XCode9: iPhone is busy: Preparing debugger support for iPhone

    XCode9 iPhone is busy Preparing debugger support for iPhone Click on Window menuSelect Device and SimulatorsSelect your
  • 你会写开发文档吗

    你会写软件开发文档吗 xff1f 如今 xff0c 软件开发越来越复杂 xff0c 软件的功能也越来越丰富 而几乎所有成熟的商业软件 xff0c 都是一个开发团队齐心协力的血汗结晶 罗马不是一天建成的 xff0c 当我们震撼于Microso
  • Xcode创建子工程以及工程依赖

    Xcode创建子工程以及工程依赖 背景 由于创建一个app的时候需要引入大量的依赖三方库或者自己写的工具类 所以 考虑新建一个公共工程 每次新建项目 只需要依赖这个工程就可以了 其实说白了这个公共工程就是个静态库 开始开发 1 创建iosL
  • iOS常用第三方库

    iOS常用第三方库 转载 2017年06月13日 17 46 43 下拉刷新 EGOTableViewPullRefresh 最早的下拉刷新控件 SVPullToRefresh 下拉刷新控件 MJRefresh 仅需一行代码就可以为UITa
  • 公务员考试152分上岸经验,你同样可以复制

    公务员考试152分上岸经验 你同样可以复制 xff08 2018公考必看 xff09 来源 xff1a 步知资讯 时间 xff1a 09 26 点击 xff1a 4171261 分享 下载此文章 打印 增大字体 减小字体 单位入职培训都结束
  • 工业机器人理论图谱

    工业机器人分类 xff1a 工业机器人是应用于工业环境下的一类机器人分支 xff08 下文中的 机器人 均指 工业机器人 xff09 xff0c 从结构上可以分为 串联机器人 并联机器人 串联机器人最典型的有 平面2连杆 xff08 实际没
  • HTTP协议

    HTTP协议 常用的HTTP方法HTTP请求报文与响应报文格式常见的HTTP相应状态码常见HTTP首部字段GET方法与POST方法的区别HTTP的缺点与HTTPSHTTP优化 HTTP xff08 超文本传输协议 xff09 是一个基于请求
  • debian10安装apache2 php ftp(网站服务器)

    debian安装网站服务 debian最小安装后重启机器 设置语言 dpkg reconfigure locales 选择en US UTF 8 UTF 8 xff08 其它都不选 xff09 重启机器 修改软件安装源文件 xff08 如果
  • 正则表达式(转载)

    正则表达式的基本语法 开始和结尾位置声明 表示字符串的开始 xff0c 要匹配 本身需要使用 例如 xff1a Yao 表示字符串以 Yao 开头 表示字符串的结尾 xff0c 要匹配 本身需要使用 例如 xff1a Yao 表示字符串以