首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

PHP正则捕获组与非捕获组

今天遇到一个正则匹配问题,忽然翻到有捕获组概念,手册上也是一略而过,百度时无意翻到C#Java中有对正则捕获组特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP也是可行...array &$match,它是一个数组,&表示匹配出来结果会被写入$match。...PHP会为它编号,从1开始。至于为什么会从1开始,那是因为PHP把匹配到完整字符串编号为0。 如果有多个括号或嵌套括号,按左边括号出现顺序来进行编号,如图: ?...按图中匹配模式匹配时,捕获组123号分别是红绿蓝。 捕获组忽略与命名 我们还可以阻止PHP为匹配组编号:在匹配组模式前加  ?: $mode = '/a=(\d+)b=(?...<=xxx) /d 匹配"前面是xxx一个数字" 注意格式:只能放在匹配模式字符串之前! 例如: $pattern='/(?

2K90

Shell 编程(八):学习总结

if 、for、while… 缩进,话说 if 括号内没有加空格,调试了几个小时没有发现问题,还是后面不小心按空格才发现问题。 赋值(=)前后不能有空格。...单小括号 () 单小括号 (),有三种用途:命令组、命令替换、初始化数组。 命令组:括号命令将会新开一个子 shell 顺序执行,所以括号变量不能够被脚本余下部分使用。...括号多个命令之间用分号隔开,最后一个命令可以没有分号,各命令括号之间不必有空格。...[] 单括号 [],有四种用途:内部命令、比较运算符、字符范围、索引编号 内部命令:bash 内部命令,[] test 是等同。...字符范围:用作正则表达式一部分,描述一个匹配字符范围 索引编号:[] 用来引用数组每个元素编号括号 [[ ]] [[ ]] 是 bash 程序语言关键字。

1.4K20

十分钟如何学会C语言?掌握规律举一反三考试提50分!

类型说明放在开头 有逻辑判断时将条件添加到圆括号 一般数学运算方式跟日常生活数学运算类型 一条语句叫做语句,多条语句叫做代码块,不同范围或者层级下代码块使用花括号进行标记,在数组中用于标记数组内容...02 变量 变量根据规律第十四点我们得知,变量为一个容器,并且可以存;但是此时我们还需要查看第三点“第一次遇见一个有内容或容器对其进行类型说明”;我们在创建一个变量时,这个变量是对进行存储容器...条件根据规律第五点知道是需要放在括号内,随后再看规律第七点,花括号内表示需要执行代码块,那么查看以下示例: int a=0; while(a<10){ printf("在循环..."); a+...06 数组 我们可以从第十五点规律得知,数组就是存储多个容器,那么创建一个容器肯定要说明类型,然后给予一个数组名,最后给予一个内容,我们可以根据第七条规律得知,数组内容是使用花括号标记,那具体如何写呢...我们可以查看一下格式: 类型 数组名[]={1,2} 从以上格式我们可以得知,开头就是类型,随后就是数组名,在数组名右侧是有一个方括号,表示这个是数组,随后等于号右边用花括号将其进行了引入,并且不同之间使用了逗号进行分隔

56240

队列详解(附相关面试题)

压栈时候,只需要将数据插入到top位置,然后让top移动到下一个位置即可。 1.2.3 栈出栈 由于遵循后进先出,自然是从数组尾部进行出栈。也就是top--这个位置开始出栈。...完整代码放在gitee仓库:Stack List: 数据结构之栈操作  1.3 括号匹配问题        链接:20....有效字符串满足: 左括号必须用相同类型括号闭合。 左括号必须以正确顺序闭合。 思路:使用栈来进行判断,将字符串括号入栈,然后提取栈顶字符,没入栈括号进行匹配。  ...2.2 队列实现         队列也可以数组链表结构实现,使用链表结构实现更优一些,因为如果使用数组结构,出队列在数组头上出数据,效率会比较低,因为要挪动数据。  ...因为在出队尾元素时候,链式结构需要遍历一边,找出队尾上一个元素,而在数组,只需要根据下标找出即可。循环队列最主要问题是,如何判断队满队空? 队空:rear == front,即头尾相等。

26300

程序员C语言快速上手——基础篇(四)

声明数组 1 // 声明格式:类型 数组变量名[长度] 2 // 声明数组指明元素类型长度(元素个数),且[]长度必须为常量 3 int arr[10]; 初始化数组 C语言数组在使用前应当初始化...即大括号初始化 2 int arr[10] = {0,1,2,3,4,5,6,7,8,9}; 3 4 // 可以只指定部分元素,剩下元素将自动使用0初始化 5 int arr[10...] = {0,1,2,3,4}; //数组元素:0,1,2,3,4,0,0,0,0,0 6 7 // 使用大括号初始化时,括号长度可以省略,编译器将按照实际个数来确定数组长度 8...// 数组每个元素都会被初始化为0 需要注意,使用大括号初始化数组时,大括号不能为空,至少要写一个。...ASCII表可知,该字符属于控制字符,即无法打印显示出来字符,它在ASCII表编号是0,即表第一个字符NUL。

73450

2.6 java数组

,如果说想要存储全班同学年龄应该怎么办呢?...这是由于我们后边会引入一个叫做索引概念,实际就是啤酒箱子啤酒编号,我们通过编号可以找到每一个元素,而这个编号就是int类型,所以编号最大也就是int最大,也就是数组最大长度。...数组声明,我们使用数据类型[] 数组名,来代表一个数组,比如说,int [] arr 就是说有一个int类型数据,数组元素类型是int, 数组名字叫做arr.而这个中括号也是可以放在数组后边...,要注意我们之前说过特点,数组长度一旦给定就无法改变,还有一点需要注意,这个数组定义完以后,数组元素是有初始,基本数据类型初始就是默认,而int默认是0 ,所以这个四个长度数组,...这个数组定义完了以后,我们是可以对数组里边元素做修改,并且可以获取数组中元素。这个时候我们就需要引入一个概念,叫做数组索引,其实索引指就是数组中元素编号,方便我们操作数组元素。

74030

复杂链表复制-图解数据结构之数组、链表、栈、队列

由于不必须按顺序存储,链表在插入删除时候可以达到 O(1) 复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号节点则需要 O(n) 时间,而顺序表相应时间复杂度分别是O(logn...因而按照后进先出(LIFO, Last In First Out)原理运作。在栈,push pop 操作都发生在栈顶。...有效字符串满足:   左括号必须用相同类型括号闭合。   左括号必须以正确顺序闭合。   ...这个问题实际是的一道题目复杂链表复制,我们可以利用栈Stack来解决这个问题。   首先我们将括号对应规则存放在Map,这一点应该毋容置疑;   创建一个栈。...遍历字符串,如果字符是左括号就直接加入stack,否则将stack栈顶元素与这个括号做比较,如果不相等就直接返回false。遍历结束,如果stack为空,返回true。

41710

【图解数据结构】外行人也能看懂哈希表

把参赛编号转化为数组下标的映射方法就叫作散列函数(或“Hash函数”“哈希函数”),而散列函数计算得到就叫作散列(或“Hash”“哈希”)。...若之前运行100次查询0.1s,则现在1w s。这就可能消耗大量CPU或线程资源,导致系统无法响应其他请求,即拒绝服务攻击(DoS)。...2 hash函数 即hash(key),其中key表示元素K,hash(key)表示经过散列函数计算得到hash。 若编号就是数组下标,所以hash(key)就等于key。...通过hash函数求出要查找元素键值对应散列,然后比较数组中下标为散列元素要查找元素: 若相等 则为目标元素 否则 继续顺序往后查找 若遍历到数组空闲位置,还没找到,说明目标元素不在散列表...缺点 删除数据时,特殊标记已删除数据 所有的数据都存储在一个数组,冲突代价更高 所以,使用开放寻址法解决冲突散列表,装载因子上限不能太大。这也导致这种方法比链表法更浪费内存空间。

70120

数据结构与算法系列之散列表(一)(GO)

现在如果要实现通过编号来找到具体学生 可以把这1000个学生信息放在数组里。编号为1学生,放到数组中下标为1位置;编号为2学生,放到数组中下标为2位置。...以此类推,编号为k学生放到数组中下标为k位置 因为编号数组下标一一对应,当我们需要查询编号为x学生时候,只需要将下标为x数组元素取出来就可以了,时间复杂度就是O(1) 实际上,这个例子已经用到了散列思想...可以把它定义成hash(key) ,其中key表示元素键值,hash(key)表示经过散列函数计算得到散列 在上边例子编号就是数组下标,所以hash(key)就等于 key。...通过散列函数求出要查找元素键值对应散列,然后比较数组中下标为散列元素要查找元素。如果相等,则说明就是我们要找元素;否则就顺序往后依次查找。...如果 K 非常大(比如大于10万),就使用快速排序,复杂度O(NlogN) 由于文章篇幅原因,代码实现,放在了github上,需要可以自取(GO实现) 有两个字符串数组,每个数组大约有10万条字符串

1K20

【图解数据结构】外行人也能看懂哈希表

把参赛编号转化为数组下标的映射方法就叫作散列函数(或“Hash函数”“哈希函数”),而散列函数计算得到就叫作散列(或“Hash”“哈希”)。...若之前运行100次查询0.1s,则现在1w s。这就可能消耗大量CPU或线程资源,导致系统无法响应其他请求,即拒绝服务攻击(DoS)。...2 hash函数 即hash(key),其中key表示元素K,hash(key)表示经过散列函数计算得到hash。 若编号就是数组下标,所以hash(key)就等于key。...通过hash函数求出要查找元素键值对应散列,然后比较数组中下标为散列元素要查找元素: 若相等 则为目标元素 否则 继续顺序往后查找 若遍历到数组空闲位置,还没找到,说明目标元素不在散列表...缺点 删除数据时,特殊标记已删除数据 所有的数据都存储在一个数组,冲突代价更高 所以,使用开放寻址法解决冲突散列表,装载因子上限不能太大。这也导致这种方法比链表法更浪费内存空间。

92910

C语言之数组基本知识

如这里首元素内存编号是 5240768,第二个元素内存编号是 5240772, 这里也需要知道一点,这里编号,只是该数据存放首地址,只需要知道首地址就可以获取整个地址。...其他: 一 : 数组定义时候括号 [] 括号里面的常量 上面介绍了数组定义方式例子,如: int arr[10]这里10表示整个数组长度为常量10,[ ]也叫做下标运算符,如上面介绍那样...,一切常数、字符字符串都是右。...对于二维数组来说,它定义比一维多了一个方括号: int Arr[4][4]; 一维数组像一条线一样,只有长度;二维数组有行,有列,可以看成有长矩形一样。...在后面的学习,可以将数组指针联系起来,在更后续学习,可以联系到数据结构里面,这里以后学习到了自然会明白。

55130

C语言基础知识入门(大全)「建议收藏」

#include 就是一条预处理命令, 它作用是通知C语言编译系统在对C程序进行正式编译之前做一些预处理工作。 函数就是实现代码逻辑一个小单元。...表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其非零,就执行循环体。 各表达式变量一定要在for循环之前定义。...记住上面这两张图,这就是编程语言中所有变量在内存样子,不管是 int、char、指针、数组、结构体、对象… 都是这样放在内存。 2、指针是什么啥? 变量放在哪?...上面说,定义一个变量实际就是向计算机申请了一块内存来存放。 那如果我们要想知道变量到底放在哪了呢?可以通过运算符&来取得变量实际地址,这个就是变量所占内存块起始地址。...这里格子就是内存单元,编号就是地址,格子里放东西就对应存储在内存内容。 假设把一本书,放在了 03 号格子,然后把 03 这个编号告诉你,你就可以根据 03 去取到里面的书。

1.9K41

程序员C语言快速上手——基础篇(五)

,由于C语言规范并不严格,还有许多奇奇怪怪代码风格,但这里推荐第一种,比较简洁,易于阅读,且减少代码行数,少了花括号独占那一行,在函数较多情况下,可以减少许多花括号行。...需要注意,函数返回形式参数都是可选,当有返回时,必须配合return语句返回,当函数没有返回时,应当使用void关键字声明,注意措辞,是应当,而不是必须!...网上存在很多错误言论资料,一定要明确,在C语言中,数组不存在传递,这也是为什么不能对做函数参数数组使用sizeof运算原因所在,因为它会自动退化为指针。...什么是指针 在回答什么是指针之前认为应当先提问为什么需要指针?如果没有明确应当重视理由,大家何必花大力气学习它呢?...每个格子大小都是1字节,且每个格子都有一个编号,这个编号就被称为内存地址。如同现实生活门牌号。 当我们需要往内存存数据时,操作系统就会随机从这一片连续小格子给我们分配一些可用

90820

数据库 分区表详解

以此类推,到最后,所有大小或等于’20130101’放在另一个表,如表5。 也许有人会问,为什么“ 20100101”会放在表2,而不是表1呢?...SaleTime) --原来分区函数是将2010-1-1之前数据放在第1个分区表,将2010-1-1至2011-1-1之间数据放在第2个分区表 --现在需要将2011-1-1之前数据都放在第...在修改之前,数据分别存放在文件组Sale2009Sale2010,修改之后,数据放到哪里去了呢?...as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime) --原来分区函数是将2010-1-1之前数据放在第...1个分区表,将2010-1-1至2011-1-1之间数据放在第2个分区表 --现在需要将2011-1-1之前数据都放在第1个分区表,也就是将第1个分区表第2个分区表数据合并 --修改分区函数

1.4K40

算法与数据结构(十七) 基数排序(Swift 3.0版)

下方截图就是上述序列基数排序具体过程,在排序之前我们先得创建10个空桶,并进行0-9编号。这10个空桶会在基数排序过程存储我们要排序数值。...以此类推,62在本轮入桶过程中就进入编号为2。以个位数为基数入桶结果如下所示。 (2)、个位数为基数入桶完毕后,在安装编号从小到大将桶数据以此取出,在存入我们之前数组。...返回结果类型是Array>,是一个二维数组。外层数组存放就是10个桶,下标是桶编号。内层数组就是一个桶,负责存放与该桶编号相等基数对应数值。具体代码如下所示。 ?...4、获取数值特定位数 下方函数就是获取某数字特定位数,你可以通过取余以及求模方式来获取,以239为例,想获取十位数值3,那么我们需要将239执行Int((239%100)/10), 通过该操作...然后就是通过for循环不断去基数进行入桶出桶操作了,如下所示: ? 三、测试用例 用RadixSort类遵循了SortType方法,我们依然可以使用之前测试用例。

61460

第六节(数值数组

普通变量一样,数组声明位置将影响程序可以如何使用该数组。就现在而言,把数组声明其他变量声明放在一起。 数组元素可用于程序任何相同类型数组变量地方。...通过使用数组带方括号数组下标来访问数组各元素。...记住,多维数组很容易变得很大。 2.1 初始化数组: 第1次声明数组时,可以初始化数组全部元素或部分元素。 只需在数组声明后面加上等号用花括号括起来即可,各之间用逗号隔开。...2:使用未初始化数组,会发生什么情况? 这种情况编译器不会报错。如果未初始化数组数组元素是不确定,使用这样数组会得到无法预料结果。在使用变量和数组之前必须初始化它们,明确其中储存。...,交换for循环xy【这个方法也是比较推荐】 int x, y; int array [10][3]; int main( void ) { for( x = 0; x < 10; x++

17210
领券