RegExp--笔记

1.普通字符 
        数字、字母、下划线、中文。。。
        \n          换行符
        \t          制表符(也就是tab键)
        \\          表示"\"本身
    \^,\$,\{,\}...  匹配字符本身


2.标准字符
        \d      0~9中的任意一个数字
        \D      非数字
        \w      任意一个字母、数字、下划线、中文
        \W      除了以上之外
        \s      空格符、制表符、换行符等空白符中的任意一个
        \S      除了空白符之外
        .       匹配任意一个字符,所有的都匹配
3.自定义字符集
        [] : 表示自定义字符集
            ex: [abd]  表示匹配abd中的任意一个字符,他们是“或”的关系
        ^ : 在自定义字符集中是取反的意思
            ex: [^abd] 表示匹配除了abd的任意字符,包括空白字符
        - :表示重什么到什么一般 0-9 a-z A-Z
            ex: [a-z]  表示匹配26个小写字母中的任意一个
                [^0-9]  表示除了0-9数字之外的任何
4:修改匹配次数
        {}   : 表示修改匹配的次数
        {n}  : 表达式重读n次
        {m,n}: 表达式至少重复m次,最多n次
                ex: \d{m,n} 数字最少m个,最多n个
        {m,} : 表达式至少重复m次,多了不限
        ?    :  匹配0次或1次,相当于{0,1}
        +    :  表达式至少出现1次,相当于{1,}
        *    :   表达式出现任意次,包括0,相当于{0,}
5:模式
        贪婪模式:默认匹配符合表达式的最长的字符
        非贪婪模式:反之
            ex:在匹配次数的后面加上"?"就可以取消贪婪模式
            \d{2,4}?    以最少次数2匹配
            \d+?        以最少次数1匹配
            \d*?        以最少次数0匹配
            a\d{2,4}?b  这种表达式在匹配的时候要先匹配整个表达式
6:匹配模式
        ignorecase  忽略大小写模式
            ex: (?i) [a-z] (?-i)  
                ?i 开启忽略大小写
                ?-i 关闭忽略大小写
        singleline  单行模式    将所有的字符串当做一行字符串,只有一个开头和结尾
        multiline   多行模式    每行都有开头和结尾
7:字符边界
        ^ : 匹配字符串开始的位置,与自定义的"^"不同
            ex: ^ab 匹配以ab开头
        $ : 匹配字符串的结尾 -- 记住默认是单行模式只有一个结尾
            ex: ab$ 以ab结尾,并匹配ab
        \b: 匹配一个单词边界
            ex: boy\b 匹配boy的"右边"不是\w的其他字符 
8:选择符和分组
        (): 分组的意思
        | : 或的意思
            ex: (0\d{2,3}-\d{7,8}) | (1[34578]\d{9})  匹配前面的表达式或后面的表达式
      
9:反向引用  每一对()会分配一个编号,会根据左括号的顺序自动从1开始编
        \数字 :将前面的第几个分组引用下,就不用重写了
            ex: <([a-zA-Z]+)> .+ </\1>  这里\1就是将前面的分组引用过来
                ([a-z]{2}) \1  将前面的重复1次


10:预搜索(零宽断言)  是对位置的匹配
        (?=exp) :断言自身出现的位置的后面能匹配表达式exp
            ex:[a-z]+(?=ing) 后面应该有ing,但是不会匹配
        (?<=exp) :断言自身出现的位置的前边能匹配表达式exp
            ex:(?<=_)[a-z]+  匹配前面有"_"的字符
        (?!exp) :断言此位置的后面不能匹配表达式exp
        (?<!exp):断言此位置的前面不能匹配表达式exp


11:练习
      1: 匹配首尾空格
            (^\s+)|(\s+$)





双向搜索算法是一种从起点和终点同时进行搜索的算法,可以有效地减少搜索的时间和空间复杂度。在MATLAB中,可以使用双向搜索算法来解决一些图论问题,如最短路径问题等。 双向搜索算法的基本思路是从起点和终点同时开始搜索,每次从两个方向中选择一个距离当前节点最近的节点进行扩展,直到两个搜索方向相遇。在搜索过程中,需要记录每个节点的前驱节点和到起点/终点的距离,以便在搜索结束后回溯出最短路径。 以下是一个简单的MATLAB实现示例: ```matlab function [path, dist] = bidirectional_search(graph, start, goal) % graph: 图的邻接矩阵 % start: 起点 % goal: 终点 n = size(graph, 1); % 节点数 visited1 = false(n,1); % 起点方向已访问的节点 visited2 = false(n, 1); % 终点方向已访问的节点 pred1 = zeros(n, 1); % 起点方向每个节点的前驱节点 pred2 = zeros(n, 1); % 终点方向每个节点的前驱节点 dist1 = inf(n, 1); % 起点方向每个节点到起点的距离 dist2 = inf(n, 1); % 终点方向每个节点到终点的距离 queue1 = start; % 起点方向的队列 queue2 = goal; % 终点方向的队列 visited1(start) = true; visited2(goal) = true; dist1(start) = 0; dist2(goal) = 0; while ~isempty(queue1) && ~isempty(queue2) % 从起点方向扩展节点 curr1 = queue1(1); queue1(1) = []; for i = 1:n if graph(curr1, i) > 0 && ~visited1(i) visited1(i) = true; pred1(i) = curr1; dist1(i) = dist1(curr1) + graph(curr1, i); queue1(end+1) = i; if visited2(i) % 相遇,回溯路径 path = backtrack_path(pred1, pred2, i); dist = dist1(i) + dist2(i); return; end end end % 从终点方向扩展节点 curr2 = queue2(1); queue2(1) = []; for i = 1:n if graph(i, curr2) > 0 && ~visited2(i) visited2(i) = true; pred2(i) = curr2; dist2(i) = dist2(curr2) + graph(i, curr2); queue2(end+1) = i; if visited1(i) % 相遇,回溯路径 path = backtrack_path(pred1, pred2, i); dist = dist1(i) + dist2(i); return; end end end end % 没有找到路径 path = []; dist = inf; function path = backtrack_path(pred1, pred2, i) % 回溯路径 path = [i]; while pred1(i) > 0 i = pred1(i); path = [i, path]; end i = pred2(path(end)); while i > 0 path = [path, i]; i = pred2(i); end end end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值