模式匹配

javascript 正则表达式-贪婪模式与懒惰模式

ⅰ亾dé卋堺 提交于 2020-03-26 09:16:25
http://buzheng.org/blog/regex-possessive-quantifiers-reluctant-quantifiers/ 前段时间对自己以前了解的 正则表达式的基础知识 做了一个总结,有了基础知识已经能够能应付大多数情况,像字符串匹配、正则替换、校验等;但是再使用的过程中你可能发现一个问题,就是当使用重复元字符匹配数量时,总是会尽可能长的去匹配,而有时这恰恰不是你想要的。看下面的例子: <a href=”http://www.google.com”>谷歌</a><a href=”http://www.baidu.com”>百度</a> 你希望匹配出每个链接的html内容。如果你用 <a (.*)</a>会首先匹配到整个字符串,而不是你希望的<a href=”http://www.google.com”>谷歌</a>和<a href=”http://www.baidu.com”>百度</a>。 为什么会出现这种情况呢?这就是正则表达式的贪婪模式。当出现重复数量的时候,会尽可能的多匹配。上述的正则表达式中 . 表示任意字符,* 代表可以重复出现任意个,根据正则表达式的贪婪个性,不匹配到最后才怪呢。就像人一样,有贪婪就有懒惰,一个?就可以让正则立刻改变本性,这时的正则就表现懒惰模式的本性了。 修改后的正则表达式为:<a (.*?)</a>

正则表达式贪婪与非贪婪模式

僤鯓⒐⒋嵵緔 提交于 2020-03-26 09:07:43
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配    如:String str="abcaxc";     Patter p="ab*c";   贪婪匹配: 正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到: abcaxc (ab*c)。    非贪婪匹配 :就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到: abc (ab*c)。 2.编程中如何区分两种模式    默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。   量词:{m,n}:m到n个      *:任意多个      +:一个到多个      ?:0或一个 3.程序实例 使用Snort的规则一条规则的一部分作为匹配文本,匹配出其中的content部分。 1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class RegularTest { 5 6 public static void main(String[] arg){ 7 String text="(content:\"rcpt to root

正则表达式贪婪模式中的非贪婪模式

左心房为你撑大大i 提交于 2020-03-26 09:02:36
这两天再写一个内部的统计,需要提取来自于其它搜索的关键字。 正则表达式:q=(.*?)& 需要提取的内容: http://so.360.cn/s?ie=utf-8&src=hao_search&q=%E6%83%A0%E5%B7%9E%E4%B8%BD%E5%A3%B0&ab 匹配的内容:%E6%83%A0%E5%B7%9E%E4%B8%BD%E5%A3%B0 解释:(.*? )其中?的作用,他的作用就是勉强模式重复前面的字符,什么意思呢?就是如果我用(.*a)去匹配aaaaaaa字符串的结果就是(aaaaaaa)源字符串这叫贪婪模式,如果用(.*?a)去匹配aaaaaaa的话他就会先匹配第一a,然后是第二个a,然后是第三个a…….这就叫勉强模式匹配有的地方也叫懒惰模式匹配。通俗一点(大家都喜欢通俗的解释,呵呵)就是前者是从后往前去匹配尽可能多的字符,而后者是从前往后匹配 来源: https://www.cnblogs.com/fogwang/p/3421470.html

python re模块

我的未来我决定 提交于 2020-03-26 07:48:36
'''1. 元字符 符号 含义 . 匹配除换行以外的任意字符 ^ 匹配字符串的开始位置,在[]中出现为非的意思 $ 匹配字符串的结束位置 * 匹配0次、1次或多次前面的原子 ? 匹配0次或1次前面的原子 + 匹配1次或多次前面的原子 {n} 前面的原子恰好出现n次 {n,} 前面的原子至少出现n次 {n,m} 前面的原子至少出现n次,至多出现m次 | 模式选择符 () 模式单元符,作分组:在findall 中使用,返回的参数是()中匹配的值,不会管外面其他参数      (?:reg):取消优先级,在findall中使用,会返回满足全部正则的字符,而不是返回字符的一部分(reg是变量)      (?P<name>);给分组指定name. (name是变量)   [] 字符集,里面出现的字符都只表示某一个字符,不会有转义问题    eg:    [a-z0-9A-Z] 数字,大小写字母中的一个 通用字符 符号 含义 \w 匹配任意一个字母、数字或下划线 \W 匹配除字符、数字和下划线以外的任意一个字符 \d 匹配任意一个十进制数 \D 匹配除十进制数以外的任意一个其它字符 \s 匹配任意一个空白字符 \S 匹配除空白字符以外的任意一个其它字符 \b:表示字母数字与非字母数字的边界, 非字母数字与字母数字的边界。 \B:表示字母数字与(非非)字母数字的边界

死磕 java集合之LinkedTransferQueue源码分析

耗尽温柔 提交于 2020-03-23 16:25:06
问题 (1)LinkedTransferQueue是什么东东? (2)LinkedTransferQueue是怎么实现阻塞队列的? (3)LinkedTransferQueue是怎么控制并发安全的? (4)LinkedTransferQueue与SynchronousQueue有什么异同? 简介 LinkedTransferQueue是LinkedBlockingQueue、SynchronousQueue(公平模式)、ConcurrentLinkedQueue三者的集合体,它综合了这三者的方法,并且提供了更加高效的实现方式。 继承体系 LinkedTransferQueue实现了TransferQueue接口,而TransferQueue接口是继承自BlockingQueue的,所以LinkedTransferQueue也是一个阻塞队列。 TransferQueue接口中定义了以下几个方法: // 尝试移交元素 boolean tryTransfer(E e); // 移交元素 void transfer(E e) throws InterruptedException; // 尝试移交元素(有超时时间) boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException; //

死磕 java集合之SynchronousQueue源码分析

隐身守侯 提交于 2020-03-23 16:23:15
问题 (1)SynchronousQueue的实现方式? (2)SynchronousQueue真的是无缓冲的吗? (3)SynchronousQueue在高并发情景下会有什么问题? 简介 SynchronousQueue是java并发包下无缓冲阻塞队列,它用来在两个线程之间移交元素,但是它有个很大的问题,你知道是什么吗?请看下面的分析。 源码分析 主要属性 // CPU的数量 static final int NCPUS = Runtime.getRuntime().availableProcessors(); // 有超时的情况自旋多少次,当CPU数量小于2的时候不自旋 static final int maxTimedSpins = (NCPUS < 2) ? 0 : 32; // 没有超时的情况自旋多少次 static final int maxUntimedSpins = maxTimedSpins * 16; // 针对有超时的情况,自旋了多少次后,如果剩余时间大于1000纳秒就使用带时间的LockSupport.parkNanos()这个方法 static final long spinForTimeoutThreshold = 1000L; // 传输器,即两个线程交换元素使用的东西 private transient volatile Transferer<E>

SynchronousQueue 1.8 源码解析

ぐ巨炮叔叔 提交于 2020-03-23 16:16:20
[TOC] SynchronousQueue 1.8 源码解析 一,简介 SynchronousQueue 是一个很奇怪的队列,感觉都不能叫队列,因为内部没有数据的存储空间,队列不能peek,因为不存在元素,任何入队的线程都会阻塞,直到有线程来出队,也就是这个队列是一组操作,入队和出队要一起离开,出队也是一样,必须等入队,必须结伴而行;队列支持公平和非公平的模式(指的是队列匹配线程的顺序),公平模式的数据结构是队列(FIFO),非公平模式使用的是栈(LIFO)。 二,UML 图 三,基本成员 abstract static class Transferer<E> { // 出队入队都是这一个方法 abstract E transfer(E e, boolean timed, long nanos); } // npu数 static final int NCPUS = Runtime.getRuntime().availableProcessors(); // 带超时时间的自旋次数 static final int maxTimedSpins = (NCPUS < 2) ? 0 : 32; // 没有超时的自旋次数 static final int maxUntimedSpins = maxTimedSpins * 16; TransferStack 非公平的实现,主要成员

字符串----正则表达式的匹配

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-22 17:00:59
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 当模式中的第二个字符不是“*”时: a.如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的。 b.如果 字符串第一个字符和模式中的第一个字符相不匹配,直接返回false。 而当模式中的第二个字符是“*”时: 如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配。如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式: a.模式后移2字符,相当于x*被忽略; b.字符串后移1字符,模式后移2字符; c.字符串后移1字符,模式不变,即继续匹配字符下一位,因为*可以匹配多位; function match(s, pattern) { // write code here if (s == null || pattern == null) { return false } return checkMatch(s, pattern, 0, 0) } function checkMatch(s, pattern, i, j)

5 Django -2 的路由层

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-22 05:26:42
url配置就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。 简单的路由配置 from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_path(r'^articles/([0-9]{4})/$', views.year_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] 注意: 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是 ^articles 而不是 ^/articles 。 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义

(转)Nginx静态服务配置---详解root和alias指令

老子叫甜甜 提交于 2020-03-21 14:55:50
Nginx静态服务配置---详解root和alias指令 原文:https://www.jianshu.com/p/4be0d5882ec5 静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器。同时nginx也是一个高性能的静态文件服务器。通常都会把应用的静态文件使用nginx处理。 配置nginx的静态文件有两个指令,一个 root 和一个 alias。对于这两个指令,是否需要在路径的后面加上斜杠,经常容易让人犯晕,本文通过尝试不同的匹配规则,归纳了一个比较通用的配置方式。 基本配置 与 简明 Nginx Location Url 配置笔记 一文关于location url配置的实验一样,本文也使用vagrant虚拟机里的nginx。其基本配置如下: /etc/nginx/sites-enabled/pro.conf server { listen 80 default_server; server_name localhost; access_log /var/log/nginx/pro/access.log; error_log /var/log/nginx/pro/error.log; error_page 404 /404.html; root /vagrant/pro; index index.html index.htm; } 项目的目录如下: ☁ pro