首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

正则表达式:如果字符串末尾的模式不匹配

正则表达式是一种用于匹配和处理字符串的强大工具。在这个问答内容中,我们关注的是如何在字符串末尾检查一个模式是否不匹配。

在正则表达式中,我们可以使用负向零宽度断言(negative lookahead)来实现这个功能。负向零宽度断言的语法是 (?<!pattern),其中 pattern 是我们要检查的模式。

例如,如果我们想要检查字符串末尾是否不是数字,我们可以使用以下正则表达式:

代码语言:txt
复制
(?<!\d)$

这里,\d 表示数字,(?<!\d) 表示负向零宽度断言,检查前面不是数字。$ 表示字符串的结尾。因此,这个正则表达式表示:在字符串末尾,如果前面不是数字,则匹配。

在编程语言中,我们可以使用正则表达式库来实现这个功能。例如,在 Python 中,我们可以使用 re 模块:

代码语言:python
代码运行次数:0
复制
import re

pattern = r'(?<!\d)$'
string = 'abc123'

if re.search(pattern, string):
    print('字符串末尾不是数字')
else:
    print('字符串末尾是数字')

这段代码将输出 字符串末尾不是数字,因为字符串 abc123 的末尾不是数字。

总之,正则表达式是一种非常强大的工具,可以帮助我们处理和匹配字符串。负向零宽度断言是其中一个非常有用的功能,可以帮助我们检查字符串末尾是否不匹配特定模式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux 正则表达式匹配包含某些字符串技巧

经常我们会遇到想找出包含某个字符串文本,程序员最容易想到是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误。...我们可以这样写:[^hede],但这样正则表达式完全是另外一个意思,它意思是字符串里不能包含‘h',‘e',‘d'三个但字符。那什么样正则表达式能过滤出包含完整“hello”字串信息呢?....)*$ 上面这个表达式就能过滤出包含‘hede'字串信息。我上面也说了,这种写法并不是正则表达式“擅长”用法,但它是可以这样用。 解释 一个字符串是由n个字符组成。...在hacker news上看到regex golf,几道很有趣正则表达式题,有的需要用到匹配这种匹配,比如需要匹配包含某个单词串。...比如要匹配不含hello字符串就可以这样写。 ^(?!.*hello) 这里.*用来表示hello之前可能有其他字符,为什么还要加^呢,因为如果不加的话,可能匹配到h之后这个位置上了。

8.7K30
  • 字符串匹配---BF算法--朴素模式匹配算法

    int sizeA=a.length();//返回字符串中字符个数 //求出b串长度 int sizeB = b.length(); //i指向A,j指向B子串 int i=0; int...//当前j值等于i移动次数,i现在值减去i移动次数,回到i起始位置 //往后移动一次,相当于加1 i = i - j + 1; //j回到子串头部 j = 0;...} } //i值是按下标从0开始本身应该是8,j值本身应该是4,但最后一次匹配成功后,还有一次i++和j++ cout << "循环结束后i=" << i << endl; cout...<< "循环结束后j=" << j << endl; //判断是<em>匹配</em>成功还是<em>匹配</em>失败 if (j == sizeB) { //退出循环时i记录<em>的</em>是自串<em>的</em>最后一个字符在主串中<em>的</em>位置加一 //j...记录<em>的</em>是子串<em>的</em>最后一个元素<em>的</em>位置加一,等于子串<em>的</em>长度 //i-j得到<em>的</em>是子串<em>的</em>第一个字符在主串中<em>的</em>位置 return i-j;//<em>匹配</em>成功,返回子串在主串中<em>的</em>起始位置 } else {

    2.1K20

    算法:字符串KMP模式匹配

    在朴素模式匹配算法中,主串pos值(i)是不断地回溯来完成(见字符串基本操作中Index函数)。而计算机大仙们发现这种回溯其实可以是不需要。...通过分析发现子串中如果有相等字符,j值变化就会不相同,也就是说,这个j值变化跟主串其实没什么关系,关键就取决于子串结构中是否有重复问题。...因为空格与C 匹配,搜索词还要继续往后移。这时,已匹配字符数为2("AB"),对应"部分匹配值"为0。所以,移动位数 = 2 - 0,结果为 2,于是将搜索词向后移2位。..."部分匹配值"就是"前缀"和"后缀"最长共有元素长度。...else                 nextval[i] = nextval[j];/* 如果与前缀字符相同,则将前缀字符 */             /* nextval值赋值给nextval

    1.7K80

    PHP中正则表达式模式匹配

    PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)正则表达式模式匹配功能函数集....A (PCRE_ANCHORED) 如果设置了这个修饰符, 模式被强制为"锚定"模式, 也就是说约束匹配使其仅从 目标字符串开始位置搜索....D (PCRE_DOLLAR_ENDONLY) 如果这个修饰符被设置, 模式元字符美元符号仅仅匹配目标字符串末尾....如果这个修饰符 没有设置, 当字符串以一个换行符结尾时, 美元符号还会匹配该换行符(但不会匹配之前任何换行符). 如果设置了修饰符m, 这个修饰符被忽略. 在perl中没有与此修饰符等同修饰符....参考资料: 1、preg_match_all截取body正则表达式 2、PHP正则表达式匹配多行及模式匹配 3、PHP Manual PCRE模式 @import url(http://www.cnblogs.com

    2.9K20

    Java如何用正则表达式匹配字符串

    背景 今天运营反馈一个问题,自己扫描单词记录看不到,看了下日志显示同步英语不符合要求,限制了符合以下正则表达式句子才会入库: String regex = "^[A-Za-z0-9\s,.!?...:]+$"; 稍微解释下: ^表示匹配字符串开头; [A-Za-z0-9\s,.!?...:]表示匹配一个英文字母(大写或小写)、数字、空格、逗号、句号、感叹号、问号、或冒号中任意一个字符; +表示匹配前面的子表达式一次或多次; $表示匹配字符串结尾。...正题 在Java中,由于反斜杠字符 \ 在正则表达式中具有特殊含义,因此在使用正则表达式匹配字符串 \ 时,需要使用双反斜杠 \\ 来表示一个反斜杠字符。...所有要匹配两个 \\ 需要写四个反斜杠 \\\\ 才可以~ 修改后测试果然通过,下面演示如何使用正则表达式匹配字符串 \: import java.util.regex.Matcher; import

    8710

    【数据结构】数组和字符串(十四):字符串匹配1:朴素模式匹配算法(StringMatching)

    ;指针与字符串遍历、拷贝、比较;反转字符串) 4.3.1 字符串定义与存储   字符串在许多非数值计算问题中扮演着重要角色,并在模式匹配、程序编译和数据处理等领域得到广泛应用。...从S给定位置(通常为S第一个字符)开始,搜索模式串P,如果找到,返回模式串P在S中匹配成功起始位置;如果没找到(即S中没有P),则返回–1 .   ...这种模式匹配算法被称为朴素模式匹配算法, 2. ADL语言 3....j = 0 while j < m and S[i + j] == P[j]: j = j + 1 if j == m: # 如果模式串完全匹配...while (j < m && S[i + j] == P[j]) { j++; } if (j == m) { // 如果模式串完全匹配

    15710

    12.Python使用正则表达式匹配+前字符串

    正则表达式就像加减乘除四则运算符一样,可以跨语言使用。编程语言只要涉及字符处理,都会引入功能强大正则表达式。可以说正则表达式本身就是一套应用于字符串环境小型编程语言。...=\+)","credits",str) 'credits+copyright+1' 在Python中re模块提供了几个函数来使用正则表达式,上面用到sub方法便是用来替换匹配字符串。...我们在str中搜索符合正则表达式字符或字符串,并将之替换成"credits"。 r"\w\d{1,2}(?=+)"是我们用来搜索"+"前面"H33"而编写正则表达式。...=\+)","credits",str) 'h33+h33+copyright+1' 如果想更进一步限定"H33"必须是大写字母,可以采用如上形式。...\w范围比较大,代表[a-zA-Z0-9],若想要精确匹配可以用更精准正则表达式。感觉又找到可以写内容了:-)

    3.7K30

    java数据结构之字符串模式匹配算法

    java中String提供了很多字符串处理方法其中就包括子串匹配。 今天就来介绍一下字符串子串匹配算法。...分为两种:一种为朴素模式匹配算法(简称BF算法),改进模式匹配算法(简称KMP算法)。 下面首先来介绍一下BF算法中心思想: 这是一种带有回溯匹配算法,简称BF算法。...实现过程是从主串S第一个字符开始和模式T第一个字符开始比较,若相等则继续比较二者后续字符;否则从主串第二个字符开始和模式T第一个字符进行比较,重复上述过程,直至S或者T中所有的字符比较完毕。...BF算法实现(): package string; public class StringModel { public int BF(char S[],char T[]){//BF字符串匹配算法...O(m+n),最坏情况下时间复杂度为O(m*n); KMP算法时间复杂度为O(m+n)。

    51620

    正则表达式匹配不存在特定字符字符串

    作为一名不经常使用正则表达式程序员,想用最简单语言来描述否定匹配,不过发现确实不是那么好理解。还是按照自己知道来描述吧。...:pattern) 非获取匹配匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式各个部分是很有用。例>>如“industr(?...=pattern) 非获取匹配,正向肯定预查,在任何匹配pattern字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?...pattern) 匹配,显而易见它是匹配下一个字符串来判断本次匹配是否成功。当然这是一个否定匹配。 问题 在文档中匹配出,包含“hello”字符串。...当然这不是重点,重点是怎么来写这个正则表达式。 当然,结论是: ^(?!.*hello).*$ 运行效果: ? 将包含有“hello”字符串全部排除掉了。这样就实现了我们想要效果。

    5.5K20

    JavaScript正则表达式模式匹配教程,并且附带充足实战代码

    expression)是一个描述字符模式对象,简单点来讲就是通过正则表达式规定模式,从一堆字符串中,找到与该模式匹配字符串,并可以完成检索或字符串替换功能。...然后我们调用了一个检索方法search(),这个方法需要传入一个正则表达式对象为参数,根据这个参数去字符串匹配相应字符串如果匹配到了,则返回第一个与之匹配字符索引值;若没匹配到,返回-1。...第一种情况,字符串以 javascript开头,所以能匹配到;第二种情况,javascript不是在开头位置,而是在末尾位置,不符合匹配模式,所以匹配失败返回null。...exec() 该方法就跟前面说到传入修饰符gmatach()方法一样,它对字符串执行一个正则表达式如果匹配失败,返回null;如果匹配成功,则返回一个数组,数组第一个元素是正则表达式匹配字符串...,匹配到了javascript中java,返回了该字符串,这时lastIndex变为第一次匹配字符串起始位置索引 4;我们进行第二次索引,是从索引 5 开始匹配,往后检索到字符串末尾java

    1.2K20

    正则表达式

    " 代表除\n以外所有中一个字符,例如:正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是匹配“buug”,“b..g”可以匹配“buug”。 ...例如正则表达式“浮云$” 能够匹配字符串“一切都是浮云”末尾,但是不能匹配字符串“浮云呀” \ 组成字符   \d    [0-9] 一样 \d数字    \d{3}--------234 \...如果匹配结果比自己预想要多,那么一般都是贪婪模式原因。 实际运用  1....$匹配必须出现在字符串或行末尾,或出现在字符串或行末尾 \n 之前。$ 定位标记指定前面的模式必须出现在输入字符串结尾或输入字符串结尾处 \n 之前。            ...如果将 $ 与 RegexOptions.Multiline 选项一起使用,则匹配也会出现在一行末尾。 请注意 $ 匹配 \n,但不匹配 \r\n(回车换行组合,或 CR/LF)。

    84910

    linux shell:提取正则表达式捕获组(catch group)匹配字符串

    bash 目前大部分shell(如bash)都提供了正则表达式判断操作符=~,如下就可以对一个字符符判断是否匹配正则表达式: $ [[ "hello world" =~ wor(ld)?...]] && echo match matched 其实基于上面的表达式不仅可以判断是否匹配正则表达,还可以通过上面表达式创建变量 BASH_REGEX(数组)提取捕获组(catch group),...0(全部字符串) {BASH_REMATCH[1]} 即正则表达式捕获组1,以此类推 BASH_REGEX 是 bash定义保存正则表达式捕获组变量,不同脚本解释有不同定义,比如zsh,ksh...就有另外变量定义方式 ksh 保存正则表达匹配数据数组变量名叫 .sh.match ,对BASH_REMATCH,引用时必须以${.sh.match}方式引用 {.sh.match[0]} 即正则表达式捕获组...0(全部字符串) {.sh.match[1]} 即正则表达式捕获组1,以此类推 zsh MATCH 保存匹配整个字符串,对应就是bashBASH_REMATCH[0] match保存捕获组数据数组

    4.6K10

    Python学习(二) 正则表达式

    Python正则表达式 正则表达式是一个特殊字符序列,它能帮助你方便检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部正则表达式功能。...re.match与re.search区别 re.match只匹配字符串开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。....*′,“”,phone)’, “”, phone) 匹配字符串末尾,在多行模式匹配每一行末尾 ‘#.*$’意思是从#开始到字符串末尾所有内容,全部用空格替换。...正则表达式模式 模式字符串使用特殊语法来表示一个正则表达式: 字母和数字表示他们自身。一个正则表达式模式字母和数字匹配同样字符串。...如果你使用模式同时提供了可选标志参数,某些模式元素含义会改变。 模式 描述 ^ 匹配字符串开头 $ 匹配字符串末尾。 .

    91390

    Perl正则表达式(2) – 用正则表达式进行匹配

    冲突情况下,建议使用双斜线 // 或 花括号 {} 冲突情况下建议使用其他字符串,如/http:\/\// -> m%http://% 2.2 模式匹配修饰符 正则表达式可以在末尾添加修饰符,这些修饰符有时候也被称作标志.../p 只在当前正则表达式中开启自动捕获变量 2.3 锚位 默认情况下,如果字符串开头匹配给定模式,就会顺移到下一个字符位置继续尝试。为了让模式匹配固定位置上字符我们可以设置模式锚位。.../ \A匹配绝对开头,匹配失败不会顺移 \z /.png\z/ \z匹配绝对末尾,.png后必须没有任何字符,才能成功匹配 \Z /.png\Z/ \Z匹配相对末尾,除\z功能外,如果.png后包含换行符...捕获组会把匹配括号中模式字符串保存到相应变量; 如果不止一个括号,也就不只一个捕获组; 每个捕获组存储是原始字符串内容,而不是模式本身,可以反向引用取得这些内容,如(ab)\1。...2.7 模式测试程序 在编写perl程序时候,每个程序员都避免不了要使用正则表达式,但有时候很难轻易看出一个模式能够做什么,下面这个程序非常实用,可以用于检测某些字符串是否能够被指定模式匹配以及在什么为止匹配

    2.1K20

    Perl正则表达式:正则匹配

    、^^等)组成界定符内,并在界定符前用小写字母指定模式种类。当然我们希望界定符和正则表达式符号有所冲突(如果实在有冲突可以使用反斜杠转义),事实上最常用界定符为双斜杠//。...\n"; } 上面代码中如果不加//m修饰符则^只会匹配字符串开头从而匹配失败。此外还有另一种更严谨锚位方法,使用\A、\Z、\z锚定字符串开头、每一行末尾字符串结尾。...其使用方法如下所示: /\Abarney/ #匹配字符串绝对开头位置barney /fred\z/ #匹配字符串绝对末尾位置fred /fred\Z/ #匹配行尾也即换行符前...$what可以是任何值,甚至是正则表达式元字符,如下所示: ⑸捕获变量 在上一小节正则表达式模式分组中,我们知道圆括号通常会触发正则表达式捕获相匹配字符串以供反向引用。...\n"; } 运行结果如下所示: 这些捕获变量在下一次正则表达式成功匹配之前都是有效如果某次匹配失败,那么捕获变量里储存仍是上一次成功匹配数据,这里匹配成功指的是整个模式匹配而非捕获组匹配

    4.2K10

    10个正则表达式技巧

    1.匹配模式 正则表达式查找与模式匹配字符串部分 在JavaScript中,它们是在正斜杠之间//或使用new RegExp() 然后用于match , test或replace 您可以预先定义正则表达式...2.匹配多个 一次匹配单个字符, 或将多个字符放在方括号[]中以捕获任何匹配字符 使用连字号捕获一系列字符- ? 3.可选标志 在正则表达式末尾添加可选标志,以修改匹配工作方式。...4.开始和结束 在开始处使用插入符号^表示“字符串开始” 在末尾使用美元符号$表示“字符串结尾” 开始将匹配项组合在一起以匹配更长字符串 ?...当它在正则表达式前面时,它表示“字符串开始”,而在方括号内使用时,则表示“不是此字符”。 ? 10.总结 正则表达式可用于查找和匹配各种内容,从url到文件名 然而!...如果您尝试将正则表达式用于真正复杂任务,请务必谨慎,例如解析电子邮件(这确实令人困惑,非常快)或HTML(非常规语言,因此无法由正则表达式完全解析) 正则表达式还有(当然)还有更多,例如懒惰vs贪婪,

    1.1K20

    正则表达式基础

    默认情况下,匹配除换行符之外任何字符,如果DOTALL标志被指定时,则匹配任何字符 '^'匹配开始位置 '$'匹配结束位置 '*'前面重复出现正则表达式零次或多次,尽可能多地匹配 '+'一次或多次...,开始并行匹配,直到文本中g使得第一个可选条件匹配,继续,直到最后匹配。...那么对于文本abbbc,按照第1部分NFA引擎匹配规则,其实是没有发生回溯,在表达式中a匹配完成之后,b恰好和文本中3个b完整匹配,之后是c发生匹配,一气呵成。如果我们把文本换成abc呢?...(string) ---- re.DEBUG 显示调试信息编译表达式 re.IGNORECASE(re.I) 执行忽略大小写匹配 re.MULTILINE(re.M) 指定时,模式字符'^'在字符串开头和每行开头匹配...,紧挨每个换行符后; 模式字符'$'在字符串末尾和每行末尾,紧挨每个换行符之前; 默认'^'字符串开头,'$'字符串结尾 re.DOTALL(re.S) '.'

    72260

    JavaScript正则表达式

    正则表达式是一种文本模式模式描述在搜索文本时要匹配一个或多个字符串。 JavaScript通过RegExp来支持正则表达式正则表达式创建方式 var reg=/pattern/flags。...正则表达式匹配模式包含3个标记: g:表示全局模式模式应用于所有字符串,而非发现第一个匹配项立即停止。 i:表示区分大小写,在确定匹配项时忽略模式字符串大小写。...m:多行模式,在到达一行末尾时,还会继续查找下一行中是否存在于模式匹配项。 因此,一个正在表达式就是一个模式与3个标记组合体,不同组合产生不同效果。...index表示匹配位置,input表示应用正则表达式字符串如果 exec() 找到了匹配文本,则返回一个结果数组。否则,返回 null。...如果在一个字符串中完成了一次模式匹配之后要开始检索新字符串,就必须手动地把 lastIndex 属性重置为 0。

    1.1K100
    领券