作者: admin

  • 正则表达式基础知识

    正则表达式(Regular Expression, 简称 RegEx)是一种用于匹配和处理文本的强大工具。它通过使用特殊字符和符号定义的模式,可以灵活地搜索、提取、替换和验证文本内容。以下是正则表达式的基础知识:

    1. 普通字符

    普通字符代表它们自身的含义,用于匹配文本中相同的字符。例如:

    • "hello" 匹配字符串中的 “hello”。

    2. 元字符(Metacharacters)

    元字符是正则表达式中的特殊字符,用于构建复杂的匹配模式。

    元字符含义
    .匹配任意单个字符(换行符除外)
    ^匹配字符串的开头
    $匹配字符串的结尾
    *匹配前面的字符 0 次或多次
    +匹配前面的字符 1 次或多次
    ?匹配前面的字符 0 次或 1 次
    []匹配括号内的任意字符(字符类)
    |逻辑“或”,匹配 | 左右任意一个表达式
    ()用于分组,提取匹配的子字符串

    3. 字符类(Character Classes)

    字符类用于匹配一组字符中的任意一个。字符类是放在方括号 [] 之内的内容。

    • [abc]:匹配 abc 中的任意一个。
    • [a-z]:匹配小写字母 az 中的任意一个。
    • [0-9]:匹配数字 09 中的任意一个。
    • [^abc]:匹配除了 abc 以外的任意字符(以 ^ 开头表示非字符类)。

    4. 预定义字符类

    预定义字符类是一些简化常用字符集的快捷方式:

    符号含义
    \d匹配任意一个数字(0-9)
    \D匹配任意非数字字符
    \w匹配字母、数字、下划线(等价于 [a-zA-Z0-9_]
    \W匹配任意非字母、数字、下划线的字符
    \s匹配任意空白字符(空格、制表符等)
    \S匹配任意非空白字符

    5. 量词(Quantifiers)

    量词用于指定前面的字符或子表达式应该出现的次数。

    量词含义
    *匹配 0 次或多次
    +匹配 1 次或多次
    ?匹配 0 次或 1 次
    {n}匹配前面的字符正好出现 n
    {n,}匹配前面的字符至少出现 n
    {n,m}匹配前面的字符出现 nm

    6. 锚点(Anchors)

    锚点用于锁定匹配的开始或结束位置。

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
    • \b:匹配单词边界。
    • \B:匹配非单词边界。

    7. 分组和捕获

    使用圆括号 () 可以对表达式进行分组,方便提取和重复使用。

    • (abc):匹配完整的子字符串 abc
    • 捕获组允许你在匹配之后提取或引用该组内容。

    8. 示例

    • 匹配一个数字\d 匹配任意单个数字。
    • 匹配一个电话号码格式(如 123-456-7890)\d{3}-\d{3}-\d{4}
    • 匹配邮箱地址[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

    9. 转义字符

    元字符在需要作为普通字符使用时,可以通过加反斜杠 \ 来转义。例如:

    • \.:匹配实际的小数点,而不是任意字符。

    10. 实际例子

    假设你想提取一个文本中的数字并保留两位小数,可以使用正则表达式:\d+\.\d{2}。这个表达式表示:

    • \d+:匹配一位或多位数字。
    • \.:匹配小数点。
    • \d{2}:匹配两位数字。

    通过这些基础规则,可以匹配并处理不同的文本模式。

  • rsync用法

    拉取远程文件到本地

    rsync -av -e "ssh -p your_port" pi@ip:/mnt/myharddrive/audio/ audio

    推送本地文件到服务器

    rsync -av -e "ssh -p your_port" audio/ pi@ip:/mnt/myharddrive/audio
  • git知识点

    git diff

    git diff是查看工作区修改的文件和暂存区的区别,经本人观察未追踪的文件(也就是新建还未提交过的文件)不会展示比较。

    暂存前后的变化

    书中是这样写的

    git diff

    “此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。
    也就是修改之后还没有暂存起来的变化内容。”

    git diff --staged

    git diff –staged 是查看暂存区和最新一次提交的区别

  • Docker部署nginx 搭建简单web页面

    前言

    如果你的服务器没有安装docker,可以使用get.docker.com一件脚本来安装docker,代码如下

    $curl -fsSL https://get.docker.com -o install-docker.sh
    $sudo sh install-docker.sh

    人非圣贤,上面这段代码肯定记不住的,到用的时候又不太好找,这里教一个小窍门,直接在浏览器打开get.docker.com,打开是一段脚本代码,可以在注释里找到我们想要的代码如下

    # 1. download the script
    #
    #   $ curl -fsSL https://get.docker.com -o install-docker.sh
    #
    # 2. verify the script's content
    #
    #   $ cat install-docker.sh
    #
    # 3. run the script with --dry-run to verify the steps it executes
    #
    #   $ sh install-docker.sh --dry-run
    #
    # 4. run the script either as root, or using sudo to perform the installation.
    #
    #   $ sudo sh install-docker.sh

    一 准备html

    新建一个html文件夹,在文件夹中新建index.html写上hello world

    mkdir html && cd html
    vim index.html

    二 准备Dockerfile文件

    在html的同级目录,新建Dockerfile

    FROM nginx
    COPY ./html /usr/share/nginx/html

    三 构建docker 镜像

    在Dockerfile的同级目录 运行下面命令

    docker build -t some-content-nginx .

    四 运行docker容器

    docker run --name some-nginx -d -p 8080:80 some-content-nginx

    在浏览器输入服务器ip:8080 就能打开网页了

  • 转自虎扑,去女友家拜访须知

    1、去女友家拜访,到她家附近时不可以再挽着她的手,因为她的邻居会品头论足一番。2、进家后,不要对她太随便、太亲热,她的家人在观察着你的一举一动,以免给人留下不好的印象。3、不可不时看手表,否则她的家人会认为你不愿意呆在她家。4、离去时不可一踏出门就露出松懈姿态,因为背后她的家人们还在观察你。5、还应注意一点,去女友家做正式拜访的前一天,一定要洗澡,更衣,要做到干净、整洁,切不可邋里邋遢,既不尊重对方,又给人留下不好的第一印象。最重要的是全身都散发出干净的清洁感,如肩膀上有头屑最让人恶心。男人通常都是以外表取胜,因为父母的眼睛很容易往细处看:干净、整齐的头发、胡子,衬衣领口和袖口洁净,指甲修理整齐、干净,长裤笔挺,干净的袜子的鞋。初登恋人家门,就像参加一场考试,既要注意服饰仪表,又要为应答交谈作好必要的准备。这可从四个方面进行:一是稳定情绪,自信真诚恳切,落落大方,肯定受欢迎;虚伪做作,扭扭捏捏,必然被嫌弃。有了自信心,紧张的心情便会慢慢平静。二是了解情况。询问恋爱对象,了解其家庭成员,父母的职业,文化,兴趣,经历,性格等,知道越详细越好。情况熟悉,才能先有准备,交谈时也能有的放矢。三是初拟内容。想想对方会提出些什么问题。在这种场合下,未来的岳父母常会问问你的家庭,工作,爱好等,自己可做些准备。四是适当准备礼物,初次去对方家里做客,适当送些礼物给对方的父母,很有必要,这不仅表明你对长辈的尊敬,更表明你的诚意,一般来说,对方父母是会接受的,但应注意,送的礼品不宜太贵重,否则起点太高,以后恐怕你难以为继。初次见面,双方难免感到拘束。寒暄之后,常会冷场。这时就要引出话题。一种方法是就地取材。仔细观察墙壁,窗台,桌子等,墙上的名人字画,窗台上的菊花,桌上的各种小摆设,都可借来入话。因为它们往往体现了主人的情趣爱好,能使主人讲出许多愉快的话来。另一种方法是避生就熟。引出话题要避开对方感到陌生的事,从对方最熟悉的入手,可以谈谈新闻,聊聊天气。对方父母提问时,要会叙述说明,态度要恭敬,声音略低一些,柔和些。把话一句句,一层层说清楚,谈话时一定彬彬有礼。长辈夸奖年轻人时,总爱说:“这孩子很懂事!”一般长辈衡量青年好坏的标准,除了天生的外貌和本人的才能外,就看他是否“懂事”,也就是是否能通晓情理。在与对方父母交谈时,你一定要注意礼貌问题,要做到谦虚恭敬,善解人意。初登恋人家门,应忌讳四个方面:一忌油嘴猾舌。说话要朴实,说心里话,如一池清水,清澈见底;不做作,不油滑。二忌自我吹嘘。要懂得:不表示自己聪明,就是聪明;不夸张自己的美德,就是美德。三忌胆小怯羞。要明白:越怕讲错,就越会讲错话;不怕讲错,反倒会使言谈顺畅。胆小,拘谨,害羞,是初登恋人家门交谈时的大忌。四忌粗言劣语。语言必须文明,不礼貌的口头禅,习惯语等,一定要戒除。对方父母请你家宴,说明他们对你有了初步好感,你切不可得意忘形,露出“野性”。由于来做客赴宴是“醉翁之意不在酒”,切末贪杯,喝个酩酊大醉,美好姻缘可能会因你一醉方休而毁于一旦。拜见家长怎么穿不适宜:不要在未来的岳父岳母面前表现你的小个性了,艺术家那样的披肩长发啦,络腮胡子啦,各种放荡不羁啦,请收敛起来吧,这只能给你减分。夏天的凉拖短裤,冬天挂满泥的球鞋和满是褶皱的裤子,还是早点换了吧。有汗脚的男孩,也要前期做好准备,不要穿不透气的鞋子,换双新袜子,不要让破洞在换鞋后暴露出来。拜见家长怎么送礼物适宜:送礼物是个大学问,现在已经不再是水果点心的年代了。在挑选礼物的时候,要跟女友商量着来,有没有对方父母一直想买但没有机会去买的东西。送这样的礼物,会让长辈觉得这孩子很贴心。像是茶叶、羊毛披肩这样既实用又有面子的礼物,再好不过了。礼物很重要,价格也很关键。我恰恰不赞同送过于贵重的礼物,毕竟是第一次见面,太贵重的礼物会让对方父母觉得你是不是故意在显示有钱呢,又或者不懂得节俭,这样怎么能过日子呢。拜见家长怎么称呼适宜:得体的礼貌,在初次见面中很重要。可以事先问问对方父母的出生年份,决定称呼叔叔阿姨还是伯父伯母,这样比统称叔叔阿姨更得体一些。跟女方父母交流时要带“您”。拜见家长怎么聊适宜:谈话时,语速要适中。长辈问什么就答什么,如果稍微有点冷场,男孩子可以主动引起一些话题,可以从对方父母的爱好展开话题,但态度要谦虚谨慎,大方得体,不要滔滔不绝。拜见家长怎么不适宜:在具体聊天的过程中,请新人注意一些禁忌。1、如果对方父母有身体不好的,请不要聊健康。2、不要涉及对方家里的私事,比如退休工资啦,以前的单位啦。3、不要滔滔不绝,那样会让人觉得特别不稳重,爱显示自己。遇上本身低调的父母,会觉得这个小伙子有点夸夸其谈。4、不要谈及财产之类比较敏感的话题,即使你家里物质条件好,也要低调。男方第一次去女方家相关事项:1、时间——最好是一天之中的上午,千万别晚上去(当然这得看你未来的岳父母的意识)这是一般的礼节,以示尊重,并暗示你是一个勤奋之人。2、送礼——男方第一次去女方家总不能空手而去,总会想买点礼物,这是很多男孩子好面子才这样想,但是究竟要买什么也拿不定主意。这个礼物不要太多,但是一定要买。要买好看的,拿得出手的,不一定要很实用(因为在他们心理,你毕竟还是“外人”,所以一定要体面)。3、礼貌——上一辈的人对这个看得是比较重的,第一次去女方家之前,男方可以先问问你女朋友她们那里有没有什么特殊的礼节,如没有特别的,则和长辈的交往中保持谦虚的态度可谓是最大的礼节吧,进女方家门时,男方嘴口一定要甜,比如微笑的问叔叔阿姨你好,这是初次登门给人的第一印象(很关键的)。4、言谈——在女方家人面前,男孩子要面带微笑,多听少说,认真聆听老人的言谈、并及时应和,说话时大方自然,但不可以得意忘形,保持诚恳、实诚的本色,也许你有些事情还没想好,如大人们问起也许不知怎么回答,那就照实回答,比胡谄强多了,老人往往要的是感觉,也给你的女友一种姿态,你接纳她并会善待她的父母。”多谢””不客气””你们别忙乎.我来”要常挂在嘴边,多说关心的话。5、话题——避开一些双方敏感的话题,多询问一些女友小时候的事,这是每个父母百说不厌的经典话题,尤其是值得夸耀的事,可问一些细节。当他们的思维跟你转的时候,就减轻了对你的注意力,同时他们会认为你关心他们的女儿。6、衣着——男方第一见女方家长,衣服不必刻意讲究有多华丽,只要整洁、干净,就行,但不要太随便,还有就是头发一定要干净。7、神态举止——自然、轻松、愉快。最好用几句简短的话,表明你对将来的打算,并征求他们的意见。对他们的回答哪怕有异议,也点头,微笑,以后再说,不要破坏此次的气氛。做些力所能及的小事吧,也许他们不会让你做,但态度是另外一回事。8、吃饭——注意用餐礼仪。对方父母请你家宴,说明他们对你有了初步好感,你切不可得意忘形,这很有可能是一次非常近距离的接触。因为从饭局能看出一个人的许多品性和性格,孰优孰劣一目了然。切记,当你在席间满口塞满饭菜,还滔滔不绝讲话的时候,你的形象分已经被减去好多。男生,你无论多饿,还是一口口慢慢吃。不要给自己堆好一大碗饭菜,然后埋头猛往嘴巴里面填。这样的行为,会显得你很粗俗。 吃饭过程还要给家长多端茶倒水,男生要给女友夹菜,这些细节,家长都会看在眼里的。小贴士:由于来赴宴是“醉翁之意不在酒”,切莫贪杯,喝个酩酊大醉,美好姻缘可能会因你一醉方休而毁于一旦。小冰有一个老家的表哥就是因为贪杯,经不住女方家人的轮番劝酒,自己的酒量又有限,知道自己酒量有限还充面子海喝,结果喝得自己都不知道怎么回家的。没过两天,女方那边带话过来就把这门亲事给吹了。9、其他——第一次会面的时间最好不要太长,最好不要住在女方家里,有的家庭很忌讳这个,速战速决,见好就撤,以便为下次会面留下良好的期待。多注意观察,比如看见家里长了花草,就装作很感兴趣可以询问饲养花草的方法,要是看见有什么古董之类的陈设,可以赞美一番。总之就是要抓住岳父母的爱好,他会很有兴趣,觉得你是同道中人。

  • 阿里云服务器git pull/push无法使用

    原因:

    国内服务器厂商墙了github.com

    如何解决:

    一,获取github.com的服务器ip

    我搜索了好久,终于在网上找到了可以查询多地区ping的网站 ping.sx,我们打开网站ping.sx,查询github.com的ping值

    二,我们随便找复制一个ip在本地机器查看能否ping通,比如我们复制一个日本地区ping出的ip 20.27.177.113

    ping 20.27.177.113

    如果不能ping通,我们就换一个ip,总有能ping通的

    三,修改服务器的hosts文件,hosts的目录在/etc/hosts,这里我们就需要刚才能ping通的ip地址

    vim /ect/hosts
    20.27.177.113  github.com 
    20.27.177.113  www.github.com 

    这样我们就设置好了。

  • html5中 img标签的srcset属性有什么作用以及如何使用

    srcset属性在img标签中的作用主要是为了实现响应式图片,使得在不同的设备或者不同的分辨率下,都能够展示适应的图片效果。

    srcset属性允许你为一张图片定义多个源,这样浏览器就可以根据当前设备的特性(例如视口宽度、设备像素比等)来选择最合适的图片进行渲染。

    srcset属性的使用方法如下:

    <img srcset="img-320w.jpg 320w,
                 img-480w.jpg 480w,
                 img-800w.jpg 800w"
         sizes="(max-width: 320px) 280px,
                (max-width: 480px) 440px,
                800px"
         src="img-800w.jpg" alt="responsive image">
    

    在上面的例子中,srcset定义了三个不同的图片源,320w, 480w, 800w分别代表这三张图片的宽度。sizes属性定义了在不同的视口宽度下,图片所应占据的展示空间的宽度。

    如果浏览器不支持srcset属性,那么就会回退到src属性指定的图片源。

    在使用srcset时,需要确保你提供的每一个图片源,都要有相应的尺寸描述符(例如上面例子中的320w),这样浏览器才能正确的选择最合适的图片源。

  • 阿里云函数计算快速部署静态网页

    一、安装 s工具

    必须条件:node.js(>=12.0.0)

    官网是https://serverless-devs.com/

    npm install @serverless-devs/s -g

    判断是否安装成功

    s -v

    二、初始化项目

    通过在他们官网搜索,我找到了这个名叫start-nginx的应用

    通过如下命令,初始化一下

    s init start-nginx -d start-nginx
    官方搜索应用的网址http://www.devsapp.cn/application.html

    三、修改nginx配置文件

    修改code/nginx.conf代码如下

    
    #user  nobody;
    #Defines which Linux system user will own and run the Nginx server
    
    worker_processes  auto;
    #Referes to single threaded process. Generally set to be equal to the number of CPUs or cores.
    
    #error_log  logs/error.log; #error_log  logs/error.log  notice;
    #Specifies the file where server logs. 
    
    #pid        logs/nginx.pid;
    #nginx will write its master process ID(PID).
    
    events {
        worker_connections  1024;
        # worker_processes and worker_connections allows you to calculate maxclients value: 
        # max_clients = worker_processes * worker_connections
    }
    
    
    http {
        # anything written in /opt/nginx/conf/mime.types is interpreted as if written inside the http { } block
        #
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
        # If serving locally stored static files, sendfile is essential to speed up the server,
        # But if using as reverse proxy one can deactivate it
        
        #tcp_nopush     on;
        # works opposite to tcp_nodelay. Instead of optimizing delays, it optimizes the amount of data sent at once.
    
        #keepalive_timeout  0;
        keepalive_timeout  900;
        # timeout during which a keep-alive client connection will stay open.
    
        #gzip  on;
        # tells the server to use on-the-fly gzip compression.
    
        server {
            # You would want to make a separate file with its own server block for each virtual domain
            # on your server and then include them.
            listen       9000;
            #tells Nginx the hostname and the TCP port where it should listen for HTTP connections.
            # listen 9000; is equivalent to listen *:9000;
            
            server_name  localhost;
            # lets you doname-based virtual hosting
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
    
            location / {
                include       /etc/nginx/mime.types;
                root   /code;
                index  index.html index.htm;
           }
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }

    其中关键的一步是,在初始化的配置文件中添加了这段代码

            location / {
                include       /etc/nginx/mime.types;
                root   /code;
                index  index.html index.htm;
            }

    四、静态代码

    把静态代码复制到code目录下

    五、部署代码

    s deploy
    
  • mac如何使用brew安装php7.4版本

    一、前言

    现在是2023年8月,我本想使用如下命令安装php7,

    brew install php@7.4

    但发现brew官方已经不支持

    二、我是这样安装的

    如果你本地没有安装过其他版本的php,命令如下

    brew tap shivammathur/php
    brew install shivammathur/php/php@7.4
    brew link php@7.4

    如果你之前安装过其他版本的php,需要先unlink一下,比如我的本地安装了php@8.1

    brew unlink php@8.1
    brew link php@7.4

    三、安装brew-php-switcher

    brew install brew-php-switcher

    安装玩第二步以后基本可以实现了,也可安装这个brew-php-switcher包来切换php的版本

    具体用法如下

    切换的前提是你已经安装了多个版本的php

    brew-php-switcher 7.4 -s
    brew-php-switcher 8.1 -s