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

    PHP正则中的捕获组与非捕获组

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

    58340

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

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

    30600

    程序员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。

    75950

    2.6 java中的数组

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

    75530

    探索C嘎嘎:内存管理

    ,arr1是一个数组,但是本身还是在函数中,所以此时它还是建立在栈中,选A;我们在看arr2,arr2也是一个数组,只不过存放的是字符串常量,所以还是建立在栈中,选A;之后在往下看,此时是对arr2进行解引用...,解引用后取到的应该是第一个字符a,还是存放在栈中,选A;之后我们继续往下看,此时是pArr1依旧是一个数组,所以它还是在栈上建立的,选择A;但是此时的解引用和上面就不一样了,因为它是一个被const修饰过的数组...,所以此时被解引用的对象具有常量性,所以应该放在常量区中,所以此时这个选择D;之后在看下面,pr2是一个被动态开辟出来的数组,但是还是一个数组本质上,是在栈上建立的,选择A;但是它解引用后的对象是动态开辟出来的...2.C语言中内存管理的方式 在正式讲述C++的动态内存管理的方式之前,小编先带各位读者朋友回顾一下C语言阶段我们曾学习过的动态内存管理,这里小编先自我批评一下,我在C语言阶段学习了很多的知识点,但是因为我在大一时候的懒惰...2.1.malloc函数 上图便就是小编在一个网站上找到的malloc函数的讲解,这里小编简单讲解一下,malloc函数的功能就是开辟出一块void*的空间,括号里面放置的是你想开辟空间的大小,再看一眼返回值

    7710

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

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

    43910

    数据结构与算法系列之散列表(一)(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万条字符串

    1.1K20

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

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

    75120

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

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

    1K10

    C语言之数组的基本知识

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

    57230

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

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

    3.5K55

    数据库 分区表详解

    以此类推,到最后,所有大小或等于’20130101’的值会放在另一个表中,如表5。 也许有人会问,为什么值“ 20100101”会放在表2中,而不是表1中呢?...SaleTime) --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中 --现在需要将2011-1-1之前的数据都放在第...在修改之前,数据分别存放在文件组Sale2009和Sale2010中,修改之后,数据放到哪里去了呢?...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.7K40

    LeetCode通过栈解题逆波兰表达式 有效的括号 栈的压入、弹出序列 最小栈 清除数字

    如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’ op,这里E1’和E2’分别为E1和E2的后缀式。...+cab+e/- *我们将其中缀式的中每一个括号内对应的符号位置放到括号外去形成后缀表达式 对计算机而言中缀表达式是非常复杂的结构。...条件一需以相应的右括号闭合 条件二左括号和右括号的顺序需保持正确 条件三每个右括号都需要包含相同类型的左括号 字有点丑… public boolean isValid(String...Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pushV int整型一维数组...这里我们知道,字符是需要将所有的数字都删除的 而只要遇到数字我们就需要将数字左边的字符删除,这里我们定义一个栈,因为栈采用后进先出原则,我们将所有的非数字字符压入栈中,当遇到了数字字符,它的前一个已经在栈中

    6310
    领券