引言
习惯了使用markdown 输入法,便什么都是用 md 来编写,可惜目前文件双击都是使用 xcode 打开的。右键选择打开方式,无法更改默认打开方式(和 windows 不同),才发现,默认打开另有地方。只需三步完美设置,请看下列步骤:
步骤
一、右键选中文件,点击显示简介
二、在显示简介标签页,点击下拉框选中我们需要打开的软件
这里我使用的简洁优美小众的 Typora,好产品值得推荐
三、所有格式都用它打开,得点选:使用此应用程序打开所有这种类型的文稿。【全部更改...】 <==点它。
来自:https://blog.csdn.net/lovechris00/article/details/79935134
习惯了使用markdown 输入法,便什么都是用 md 来编写,可惜目前文件双击都是使用 xcode 打开的。右键选择打开方式,无法更改默认打开方式(和 windows 不同),才发现,默认打开另有地方。只需三步完美设置,请看下列步骤:
步骤
一、右键选中文件,点击显示简介
二、在显示简介标签页,点击下拉框选中我们需要打开的软件
这里我使用的简洁优美小众的 Typora,好产品值得推荐
三、所有格式都用它打开,得点选:使用此应用程序打开所有这种类型的文稿。【全部更改...】 <==点它。
来自:https://blog.csdn.net/lovechris00/article/details/79935134
CentOS7升级GCC版本:https://jackxiang.com/post/10700/
想打包一个swoole最新版,出现 问题如下:
解决办法:
安装最新版本的swoole 提示
pecl install swolle
...
GCC 4.8 or later required.
首先想到的时候yum更新gcc
yum install gcc
Package gcc-4.4.7-23.el6.x86_64 already installed and latest version
Nothing to do
已经是最新版本了,怎么办,只有找其它源了
curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repos.d/hop5.repo
yum install gcc gcc-g++
安装成功
gcc -v
gcc version 4.8.2 20131212 (Red Hat 4.8.2-8) (GCC)
来自:https://my.oschina.net/2688/blog/2933883
想打包一个swoole最新版,出现 问题如下:
解决办法:
安装最新版本的swoole 提示
pecl install swolle
...
GCC 4.8 or later required.
首先想到的时候yum更新gcc
yum install gcc
Package gcc-4.4.7-23.el6.x86_64 already installed and latest version
Nothing to do
已经是最新版本了,怎么办,只有找其它源了
curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repos.d/hop5.repo
yum install gcc gcc-g++
安装成功
gcc -v
gcc version 4.8.2 20131212 (Red Hat 4.8.2-8) (GCC)
来自:https://my.oschina.net/2688/blog/2933883
Windows10自带剪贴板,前提是将系统升级到win10 1809的更新及其以上,才会有系统的剪贴板,我们可以尝试更新win10系统解决。
打开方法:
,放到这儿:C:\Windows\System32\clipbrd.exe打开方法:
下载文件
picindex=3" target="_blank">https://jingyan.baidu.com/album/574c5219f8073f2c8d9dc198.html?picindex=3
https://jingyan.baidu.com/article/3d69c551a9a4d8b1cf02d7b1.html
按WIN+V键即可打开剪贴板查看器。
1)Windows下有一个复制粘贴的,免费开源的 Windows 管理剪贴板,让你处理文字更高效:Ditto,快捷键个人设置的是 Ctrl + Shift + D,Mac下也需要有这样一款软件。
2)贴贴板 – 高效易用的剪贴板工具[macOS]: https://www.appinn.com/tie-tie-ban-for-macos
快捷键: Ctrl+1 or fn+option+F1 or option + 1
自己一直在用,very good!
1、Mac(Paste破解版)
百度网盘下载链接:https://pan.baidu.com/s/1ZxfHW0YJ5-ibepIPh8XC7g
使用方法:先按Command+C复制文本或图片,然后按Command+Shift+V(快捷键可自定义)选择历史粘贴对象。
【如果安装后打开时提示:已损坏,移到废纸篓。
解决方法: 在隐私里面打开任意来源
具体做法:打开终端\ 输入命令:sudo spctl --master-disable (master前面为两短-)
此时去mac的系统偏好设置\安全性与隐私,可以看到下图,就解决问题了。
2、Win(多款)
百度网盘下载链接:https://pan.baidu.com/s/1wG1vlg2v12za48IuPVovJg
使用方法:按Ctrl+~ 选择历史粘贴对象。
原文:https://blog.csdn.net/kzadmxz/article/details/81413141
背景:在Mac上向linux上拷文件时,想和Win一样贴上全路径,怎么得到文件的全路径?
mac下如何复制文件路径: option+command+C
查看文件的文件路径快捷键:option+command+p键
如何查看问件的时间:shift + command + p
From: https://blog.csdn.net/cdqn10086/article/details/70216350
mac下如何复制文件路径: option+command+C
查看文件的文件路径快捷键:option+command+p键
如何查看问件的时间:shift + command + p
From: https://blog.csdn.net/cdqn10086/article/details/70216350
在macos下安装ansible主要有三种方法,建议采用源码安装的方法安装ansible。
brew安装(需要安装homebrew模块)
brew install ansible
From: https://www.jianshu.com/p/873975e0abb8
brew安装(需要安装homebrew模块)
brew install ansible
From: https://www.jianshu.com/p/873975e0abb8
[实践OK]linux【centos7】 如何通过yum升级vim7 到vim8
Unix/LinuxC技术 jackxiang 2019-1-6 16:59
以下四条命令搞定,谁用谁知道
来自:https://blog.csdn.net/weixin_40545512/article/details/82685927
来自:https://blog.csdn.net/weixin_40545512/article/details/82685927
$git pull
hint: Waiting for your editor to close the file... fatal: cannot run /usr/local/bin/vim: No such file or directory
error: unable to start editor '/usr/local/bin/vim'
Not committing merge; use 'git commit' to complete the merge.
I tried to upgrade from the default vim install on Mac OS X (vim 7.2) to the one used by MacVim (vim 7.3) by creating a symlink:
alias vim=/usr/bin/vim
来自:https://apple.stackexchange.com/questions/14299/replaced-usr-bin-vim-now-i-get-error-messages
hint: Waiting for your editor to close the file... fatal: cannot run /usr/local/bin/vim: No such file or directory
error: unable to start editor '/usr/local/bin/vim'
Not committing merge; use 'git commit' to complete the merge.
I tried to upgrade from the default vim install on Mac OS X (vim 7.2) to the one used by MacVim (vim 7.3) by creating a symlink:
alias vim=/usr/bin/vim
来自:https://apple.stackexchange.com/questions/14299/replaced-usr-bin-vim-now-i-get-error-messages
在secureCRT软件上运行一些简单的python脚本
Unix/LinuxC技术 jackxiang 2019-1-3 13:56
背影:买了个Mac本,无法用.vbs脚本,输入个密码啥的更快一些。
xiangdongAutoEnterPasswd*.py
secureCRT支持运行.js和.vbs以及.py格式的脚本,无奈mac上识别前两个格式的脚本只能写一写python脚本,
举个简单的例子,利用脚本直接ssh连接一台机器,
在View菜单中勾选Button Bar让这个菜单在下方显示出来,
在下方的Default右方右键出现一个菜单点击New Button按钮,在显示框的Function一栏选择Run Script中间选择编写好的.py文件
.py文件的内容大致如下:
另外一个:
来自:https://blog.csdn.net/medivhq/article/details/52119572
xiangdongAutoEnterPasswd*.py
secureCRT支持运行.js和.vbs以及.py格式的脚本,无奈mac上识别前两个格式的脚本只能写一写python脚本,
举个简单的例子,利用脚本直接ssh连接一台机器,
在View菜单中勾选Button Bar让这个菜单在下方显示出来,
在下方的Default右方右键出现一个菜单点击New Button按钮,在显示框的Function一栏选择Run Script中间选择编写好的.py文件
.py文件的内容大致如下:
另外一个:
来自:https://blog.csdn.net/medivhq/article/details/52119572
[实践OK]Macbook下使用 git log、git diff 命令时出现 ESC[33 和 ESC[m 乱码的解决办法
Unix/LinuxC技术 jackxiang 2019-1-3 10:28
好不容易买个Mac,最近一段时间在使用 git log 和 git diff 命令的时候一直有乱码出现,具体表现为在行首出现 ESC[33,而在行尾出现 ESC[m,如下所示:
解决
经过搜索之后了解到,出现该问题的原因是 git 使用的默认分页程序是 less,而默认的直接运行 less 的话,会无法正确解析转义字符。但是如果以 -r 命令来运行 less 的话,就可以解决了。故解决办法就是将 git 的默认分页程序改为 “less -r” 来运行,如下:
git config --global core.pager "less -r" 后:
好了,买个Mac花了十年,用它得花一年。
Git log 和Git diff显示正常:
方向来自:https://blog.yongli1992.com/2015/08/14/git-log-diff-esc-garbled/
解决
经过搜索之后了解到,出现该问题的原因是 git 使用的默认分页程序是 less,而默认的直接运行 less 的话,会无法正确解析转义字符。但是如果以 -r 命令来运行 less 的话,就可以解决了。故解决办法就是将 git 的默认分页程序改为 “less -r” 来运行,如下:
git config --global core.pager "less -r" 后:
好了,买个Mac花了十年,用它得花一年。
Git log 和Git diff显示正常:
方向来自:https://blog.yongli1992.com/2015/08/14/git-log-diff-esc-garbled/
[实践OK]马哥Linux使用的系统ExTiX ,Installation of ExTiX to a 磁盘,不是U盘。Based on Debian/Ubuntu with Deepin/LXQt/KDE and kernel 4.20-rc4自带安装器,不用最新版本那么麻烦。
Unix/LinuxC技术 jackxiang 2018-12-30 21:38
装在台式机上,先在笔记本上用一个USB给Win上用软件UltraISO把extix-19.1-64bit-kde-kodi18-refracta-calamares-nvidia-1970mb-181228.iso给写入硬盘映像,开机启动BIOS设置从这个U盘启动,然后,再用一个U盘给把这个extix-19.1-64bit-kde-kodi18-refracta-calamares-nvidia-1970mb-181228.iso给拷贝进去,再插入到台式机上,这个ExTix会自动识别为/dev/sdc,用fdisk -l也能看到,于是把这台式机的那个磁盘/dev/sda给格式化:
mkfs.ext4 /dev/sda
cp extix-19.0-64bit-deepin-refracta-calamares-kodi18-1760mb-181208.iso /dev/sda
重启,设置BIOS从台式机磁盘启动,OK。但是空间没有500G和之前U盘一样大,怎么办?
https://blog.csdn.net/huanghai381/article/details/50033775
From:https://www.extix.se/?page_id=24
ExTiX - The Ultimate Linux System
Based on Debian/Ubuntu with Deepin/LXQt/KDE and kernel 4.20-rc4
Deepin: https://sourceforge.net/projects/extix/files/
https://cytranet.dl.sourceforge.net/project/extix/extix-19.0-64bit-deepin-refracta-calamares-kodi18-1760mb-181208.iso
mkfs.ext4 /dev/sda
cp extix-19.0-64bit-deepin-refracta-calamares-kodi18-1760mb-181208.iso /dev/sda
重启,设置BIOS从台式机磁盘启动,OK。但是空间没有500G和之前U盘一样大,怎么办?
https://blog.csdn.net/huanghai381/article/details/50033775
From:https://www.extix.se/?page_id=24
ExTiX - The Ultimate Linux System
Based on Debian/Ubuntu with Deepin/LXQt/KDE and kernel 4.20-rc4
Deepin: https://sourceforge.net/projects/extix/files/
https://cytranet.dl.sourceforge.net/project/extix/extix-19.0-64bit-deepin-refracta-calamares-kodi18-1760mb-181208.iso
[实践OK]统计redis中某类key的数量,代替keys指令
Cache与Store jackxiang 2018-12-29 15:44
./redis_keycount.sh 'SESS*'
processing....
SESS*
./redis_keycount.sh
SESS* count:21798578
ok!
来自:https://studygolang.com/articles/14275?fr=sidebar
[实践OK]centos安装php版本对应的扩展xdebug链接以及因Xdebug版本太高WinCacheGrind无法解析只得采用kcachegrind并安装用kcachegrind系统分析,后缀变为callgrind。支持swoole的Xdebug版本。
Php/Js/Shell/Go jackxiang 2018-12-25 14:45
支持swoole的Xdebug版本:https://github.com/mabu233/sdebug支持swoole的Xdebug扩展
MacBook下面需要自己编译:
https://tekkie.ro/computer-setup/how-to-install-kcachegrind-qcachegrind-on-mac-osx/
https://blog.josephscott.org/2013/07/03/qcachegrind-kcachegrind-on-mac-os-x/
xdebug是和PHP的版本对应起来的,这一步很重要,如下:
https://xdebug.org/wizard.php
centos安装php版本对应的扩展xdebug链接:
使用图形分析工具wincachedgrind分析生成的文件
下载地址:http://sourceforge.net/projects/wincachegrind/files/
centos安装php扩展xdebug安装以及用kcachegrind系统分析
Download:
https://phoenixnap.dl.sourceforge.net/project/precompiledbin/kcachegrind.zip
kali linux:
Install kcachegrind Using apt
Update apt database with apt using the following command.
sudo apt update
After updating apt database, We can install kcachegrind using apt by running the following command:
sudo apt -y install kcachegrind
来自:https://installati.one/kalilinux/kcachegrind/
百度网盘。
实践发现:
找开kcachegrind文件时要以它的后缀结尾,直接贴进去地址就成。
之前的后缀是cache,现在修改一下它这个后缀即可:
xdebug.profiler_output_name="cachegrind.out.%H.%u.%s"
修改为:
xdebug.profiler_output_name="callgrind.out.%H.%u.%s" #kcachegrind在Win下面只认这个前缀的才能打开分析,直接拖cachegrind.out*进去是打不开的。
解决kcachegrind在Win下面只认这个前缀的才能打开分析批量xdebug的文件重命名的办法:
shell下的文本替换,Shell字符串替换学习---武明瑶:https://jackxiang.com/post/9922/
mkdir -p /data/logs/xdebug
chown -R www /data/logs/xdebug
chmod -R 755 /data/logs/xdebug
打成RPM包的SPEC文件:
下载图形化工具kcachegrind在windows下的可执行版 下载地址http://sourceforge.net/projects/precompiledbin/files 用kcachegrind来看会更形象,注意需要修改从linux中执行的文件的php文件路径,这样就可以了sourcecode.
原文:https://blog.csdn.net/gdfjhc/article/details/84194948
MacBook下面需要自己编译:
https://tekkie.ro/computer-setup/how-to-install-kcachegrind-qcachegrind-on-mac-osx/
https://blog.josephscott.org/2013/07/03/qcachegrind-kcachegrind-on-mac-os-x/
xdebug是和PHP的版本对应起来的,这一步很重要,如下:
https://xdebug.org/wizard.php
centos安装php版本对应的扩展xdebug链接:
使用图形分析工具wincachedgrind分析生成的文件
下载地址:http://sourceforge.net/projects/wincachegrind/files/
centos安装php扩展xdebug安装以及用kcachegrind系统分析
Download:
https://phoenixnap.dl.sourceforge.net/project/precompiledbin/kcachegrind.zip
kali linux:
Install kcachegrind Using apt
Update apt database with apt using the following command.
sudo apt update
After updating apt database, We can install kcachegrind using apt by running the following command:
sudo apt -y install kcachegrind
来自:https://installati.one/kalilinux/kcachegrind/
百度网盘。
实践发现:
找开kcachegrind文件时要以它的后缀结尾,直接贴进去地址就成。
之前的后缀是cache,现在修改一下它这个后缀即可:
xdebug.profiler_output_name="cachegrind.out.%H.%u.%s"
修改为:
xdebug.profiler_output_name="callgrind.out.%H.%u.%s" #kcachegrind在Win下面只认这个前缀的才能打开分析,直接拖cachegrind.out*进去是打不开的。
解决kcachegrind在Win下面只认这个前缀的才能打开分析批量xdebug的文件重命名的办法:
shell下的文本替换,Shell字符串替换学习---武明瑶:https://jackxiang.com/post/9922/
mkdir -p /data/logs/xdebug
chown -R www /data/logs/xdebug
chmod -R 755 /data/logs/xdebug
打成RPM包的SPEC文件:
下载图形化工具kcachegrind在windows下的可执行版 下载地址http://sourceforge.net/projects/precompiledbin/files 用kcachegrind来看会更形象,注意需要修改从linux中执行的文件的php文件路径,这样就可以了sourcecode.
原文:https://blog.csdn.net/gdfjhc/article/details/84194948
[调试用到]利用Linux信号SIGUSR1调试嵌入式程序
Unix/LinuxC技术 jackxiang 2018-12-25 08:13
Linux嵌入式由于诸多的限制,调试方法有限,常常出现面对Bug束手无策的情况,现在介绍一种通过信号处理对Linux嵌入式应用程序进行调试的方法。
linux中一共有32种信号,在/usr/include/bits/signum.h 头文件中可以看到,具体如下:SIGHUP ;SIGINT ;SIGQUIT ;SIGILL ;SIGTRAP ;SIGABRT ;SIGIOT ;SIGBUS ;SIGFPE ;SIGKILL ;SIGUSR1 ;SIGSEGV ;SIGUSR2 ;SIGPIPE ;SIGALRM ;SIGTERM ;SIGSTKFLT ;SIGCLD ;SIGCHLD ;SIGCONT ;SIGSTOP ;SIGTSTP ;SIGTTIN ;SIGTTOU ;SIGURG ;SIGXCPU ;SIGXFSZ ;SIGVTALRM ;SIGPROF ;SIGWINCH ;SIGPOLL ;SIGIO ;SIGPWR ;SIGSYS ;SIGUNUSED
以上来自:https://blog.csdn.net/u010133805/article/details/53899667 ,他用的c++,改成c研究研究,如下:
看编号,用kill -l,SIGUSR1编号为10,如下所示:
#kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
其中SIGUSER1信号用户可以自己定义其处理行为,处理范例如下:
#make usr1
cc usr1.c -o usr1
./usr1
ps -ef|grep usr1
kill -s SIGUSR1 17331
sig_num=10
flag is true!
sig_num=10
flag is false
flag is false
linux中一共有32种信号,在/usr/include/bits/signum.h 头文件中可以看到,具体如下:SIGHUP ;SIGINT ;SIGQUIT ;SIGILL ;SIGTRAP ;SIGABRT ;SIGIOT ;SIGBUS ;SIGFPE ;SIGKILL ;SIGUSR1 ;SIGSEGV ;SIGUSR2 ;SIGPIPE ;SIGALRM ;SIGTERM ;SIGSTKFLT ;SIGCLD ;SIGCHLD ;SIGCONT ;SIGSTOP ;SIGTSTP ;SIGTTIN ;SIGTTOU ;SIGURG ;SIGXCPU ;SIGXFSZ ;SIGVTALRM ;SIGPROF ;SIGWINCH ;SIGPOLL ;SIGIO ;SIGPWR ;SIGSYS ;SIGUNUSED
以上来自:https://blog.csdn.net/u010133805/article/details/53899667 ,他用的c++,改成c研究研究,如下:
看编号,用kill -l,SIGUSR1编号为10,如下所示:
#kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
其中SIGUSER1信号用户可以自己定义其处理行为,处理范例如下:
#make usr1
cc usr1.c -o usr1
./usr1
ps -ef|grep usr1
kill -s SIGUSR1 17331
sig_num=10
flag is true!
sig_num=10
flag is false
flag is false
Mac OS升级之后,使用Android studio 运行SVN出现如下错误:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
1
解决方式,打开命令行工具运行如下的命令:
xcode-select --install
---------------------
原文:https://blog.csdn.net/Zhangxichao100/article/details/76138145
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
1
解决方式,打开命令行工具运行如下的命令:
xcode-select --install
---------------------
原文:https://blog.csdn.net/Zhangxichao100/article/details/76138145
附常用工具:
在线正则测试:http://tool.oschina.net/regex/
生成正则图片:https://regexper.com
==================================
在日常工作中,经常会用到正则操作。但是对于大多数人来说,操作正则表达式简直就是抓瞎。
本篇文章主要整理了正则表达式匹配的规则,使用中的一些要点,以及用图形化的方式列举出一些常见的正则表达式,希望能给大家带来一定的帮助,能在以后的工作中,用上正则,爱上正则。
PS:不同语言中的正则表达式的规则不完全相同,但是大部分都可以适用。
正则是什么
正则表达式是为了对字符串进行有效 数据提取 以及 匹配 的一种机制,字符串在匹配的过程中将会从第一个位置开始匹配,然后从左往右进行依次匹配,每尝试匹配一次,就会把控制权交由下一个位置,直到匹配结束。
正则表达式是由 普通字符(例如字符 a 到 z)以及 特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则的诞生
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为「神经网事件的表示法」的论文,引入了正则表达式的概念。
正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,人们发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被Open Group组织认定。
匹配规则
下面将正则中的一些基本的匹配规则列出来如下表所示:
要点
贪与不贪
举个例子,假设有以下这段html字符,我想拿到a标签中的内容:
<a>
南京长江大桥
</a>
哈哈
<a>
南京市长江大桥
</a>
然后我写了这样一个正则: <a>(.)*</a>
在线测试的结果如下(注意:这个点包起来,*没有包起来):
<a>1212</a><a>2222</a>
这个结果与我们的预期不符,正常我应该得到两个匹配的结果才对,但是现在却只匹配到一个结果。
现在把刚刚的正则改成这样: <a>(.)*?</a>
在线测试的结果如下:
共找到 2 处匹配:
<a>1212</a>
<a>2222</a>
贪 说的是正则在不约束的情况下会继续自动向右进行匹配,直到匹配结束,只要匹配的数据与正则的最后一个值匹配就算是匹配到了。
不贪 说的是只要匹配到就结束,不继续向右进行匹配了。
问号 ? 就解决了贪婪的问题,使得问号前面的字符匹配到之后就结束,但是并不是把 ?放在哪里都可以解决贪婪的,在正则里,有一些属于贪婪模式量词,比如以下这些:
{m,n}
{m,}
?
*
+
断言与零宽
在java中我们知道 断言 可以用来声明一个应该为 true 的事实,只有当断言为真时才会继续进行后续的操作。
在正则中也有 断言 的概念,但是在正则中除了 断言 还有 零宽 的概念。
断言:
通俗点将断言就是 “我断定某某情况是真的” ,而正则中的断言,就是说正则可以断定在 指定的内容 的 前面 或 后面 会出现满足指定规则的内容。比如 "aa1bb2cc3",正则可以用断言找出 bb2 前面有 aa1,也可以找出 bb2 后面有 cc3。
零宽:
零宽就是没有宽度,在正则中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身的。
断言一共有四种情况:
<span class="read-cnt">阅读数:1024</span>
\d+(?=</span>)
分组
正则表达式中用小括号 () 来做分组,也就是括号中的内容作为一个整体。
因此当我们要匹配分组 he 的时候,可以用下面这个表达式 :
(he)
he is a great man,she is a greate woman
(he)
共找到 2 处匹配:
he
he
我们看到正则表达式用小括号来做分组,那么问题来了:
如果要匹配的字符串中本身就包含小括号,那应该怎么办?
针对这种情况,正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简单,就是在要转义的字符前面加个斜杠(\)即可。
因此当我们要匹配分组 (he) 的时候,可以用下面这个表达式 :
(he) is a great man,(she) is a greate woman
(\(he\))
共找到 1 处匹配:
(he)
aa122bb233cc344
(\w)(\w)\2
共找到 3 处匹配:
122
233
344
From:
https://mp.weixin.qq.com/s/9zdQYSkZdcbWioDECwz56g
在线正则测试:http://tool.oschina.net/regex/
生成正则图片:https://regexper.com
==================================
在日常工作中,经常会用到正则操作。但是对于大多数人来说,操作正则表达式简直就是抓瞎。
本篇文章主要整理了正则表达式匹配的规则,使用中的一些要点,以及用图形化的方式列举出一些常见的正则表达式,希望能给大家带来一定的帮助,能在以后的工作中,用上正则,爱上正则。
PS:不同语言中的正则表达式的规则不完全相同,但是大部分都可以适用。
正则是什么
正则表达式是为了对字符串进行有效 数据提取 以及 匹配 的一种机制,字符串在匹配的过程中将会从第一个位置开始匹配,然后从左往右进行依次匹配,每尝试匹配一次,就会把控制权交由下一个位置,直到匹配结束。
正则表达式是由 普通字符(例如字符 a 到 z)以及 特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则的诞生
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为「神经网事件的表示法」的论文,引入了正则表达式的概念。
正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,人们发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被Open Group组织认定。
匹配规则
下面将正则中的一些基本的匹配规则列出来如下表所示:
要点
贪与不贪
举个例子,假设有以下这段html字符,我想拿到a标签中的内容:
<a>
南京长江大桥
</a>
哈哈
<a>
南京市长江大桥
</a>
然后我写了这样一个正则: <a>(.)*</a>
在线测试的结果如下(注意:这个点包起来,*没有包起来):
<a>1212</a><a>2222</a>
这个结果与我们的预期不符,正常我应该得到两个匹配的结果才对,但是现在却只匹配到一个结果。
现在把刚刚的正则改成这样: <a>(.)*?</a>
在线测试的结果如下:
共找到 2 处匹配:
<a>1212</a>
<a>2222</a>
贪 说的是正则在不约束的情况下会继续自动向右进行匹配,直到匹配结束,只要匹配的数据与正则的最后一个值匹配就算是匹配到了。
不贪 说的是只要匹配到就结束,不继续向右进行匹配了。
问号 ? 就解决了贪婪的问题,使得问号前面的字符匹配到之后就结束,但是并不是把 ?放在哪里都可以解决贪婪的,在正则里,有一些属于贪婪模式量词,比如以下这些:
{m,n}
{m,}
?
*
+
断言与零宽
在java中我们知道 断言 可以用来声明一个应该为 true 的事实,只有当断言为真时才会继续进行后续的操作。
在正则中也有 断言 的概念,但是在正则中除了 断言 还有 零宽 的概念。
断言:
通俗点将断言就是 “我断定某某情况是真的” ,而正则中的断言,就是说正则可以断定在 指定的内容 的 前面 或 后面 会出现满足指定规则的内容。比如 "aa1bb2cc3",正则可以用断言找出 bb2 前面有 aa1,也可以找出 bb2 后面有 cc3。
零宽:
零宽就是没有宽度,在正则中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身的。
断言一共有四种情况:
<span class="read-cnt">阅读数:1024</span>
\d+(?=</span>)
分组
正则表达式中用小括号 () 来做分组,也就是括号中的内容作为一个整体。
因此当我们要匹配分组 he 的时候,可以用下面这个表达式 :
(he)
he is a great man,she is a greate woman
(he)
共找到 2 处匹配:
he
he
我们看到正则表达式用小括号来做分组,那么问题来了:
如果要匹配的字符串中本身就包含小括号,那应该怎么办?
针对这种情况,正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简单,就是在要转义的字符前面加个斜杠(\)即可。
因此当我们要匹配分组 (he) 的时候,可以用下面这个表达式 :
(he) is a great man,(she) is a greate woman
(\(he\))
共找到 1 处匹配:
(he)
aa122bb233cc344
(\w)(\w)\2
共找到 3 处匹配:
122
233
344
From:
https://mp.weixin.qq.com/s/9zdQYSkZdcbWioDECwz56g
背景:Win10是在T60P上安装的,内存4G有点紧张,于是想禁用一些没有用的进程,譬如:小娜Cortana。
————————
出现不让重命名的,以及结束进程又起来了的情况,于是,用下在这个方法也就解决了问题,如下:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
成功: 已终止进程 "SearchUI.exe",其 PID 为 5964。
后又起来了。
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy>del SearchUI.exe
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy\SearchUI.exe
拒绝访问。
最后, 这个进程也就没有了,如下确认没有运行了:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
错误: 没有找到进程 "SearchUI.exe"。
————————
出现不让重命名的,以及结束进程又起来了的情况,于是,用下在这个方法也就解决了问题,如下:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
成功: 已终止进程 "SearchUI.exe",其 PID 为 5964。
后又起来了。
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy>del SearchUI.exe
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy\SearchUI.exe
拒绝访问。
最后, 这个进程也就没有了,如下确认没有运行了:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
错误: 没有找到进程 "SearchUI.exe"。