问题标签 [regex-lookarounds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 需要在java中将字符串分成两部分
我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块。我需要将它们分成两部分(一个整数部分和一个字符串)。
我尝试使用String.split("\\D", 1)
,但它正在吃掉第一个字符。我检查了所有 String API 并没有找到合适的方法。
有什么方法可以做这件事吗?
regex - 如何为以 .php 结尾的文件制作正则表达式?
我正在尝试编写一个非常简单的正则表达式来匹配任何不以.php 结尾的文件名。我想出了以下...
...但是这匹配所有文件名。如果有人能指出我正确的方向,我将不胜感激。
regex - 前瞻混乱
好的,我从正则表达式食谱中得到了这个例子
上面的正则表达式用于限制任意模式的长度
如果我再次测试'aaabbb',它会完全失败
据我了解,它会查找长度为任何字符 3 的任何字符。所以它应该匹配 'bbb' 但它不是
还有一个问题,应该遵循这种模式 x(?=x)
regex - 我们如何匹配 a^nb^n?
这是一系列教育正则表达式文章的第二部分。它显示了如何使用前瞻和嵌套引用来匹配非常规语言 a n b n。嵌套引用首先在:这个正则表达式如何找到三角数?
一种原型非正则语言是:
L = { a
nb
n: n > 0 }
这是所有非空字符串的语言,由一定数量的a
' 后跟相等数量的b
' 组成。这种语言中的字符串示例有ab
, aabb
, aaabbb
.
泵引理可以证明这种语言是非常规的。它实际上是一种原型上下文无关语言,可以通过上下文无关文法 S → aSb | ab
生成。
尽管如此,现代正则表达式实现清楚地识别的不仅仅是常规语言。也就是说,它们不是形式语言理论定义的“常规”。PCRE 和 Perl 支持递归正则表达式,.NET 支持平衡组定义。更不“花哨”的功能,例如反向引用匹配,意味着正则表达式不是正则表达式。
但是这个“基本”功能到底有多强大?例如,我们可以L
用 Java 正则表达式识别吗?我们是否可以将环视和嵌套引用结合起来,并使用一种模式String.matches
来匹配诸如ab
, aabb
,aaabbb
等之类的字符串?
参考
- perlfaq6:我可以使用 Perl 正则表达式来匹配平衡文本吗?
- MSDN - 正则表达式语言元素 - 平衡组定义
- pcre.org - PCRE 手册页
- regular-expressions.info - Lookarounds和Grouping and Backreferences
java.util.regex.Pattern
相关问题
regex - 正则表达式 - 前瞻断言
我对前瞻断言 (?=) 有疑问。例如,我有表达:
它匹配Win
, 如果表达式是Win2000
, Win2000fgF
。我有下一个表达:
它匹配数字和小写字母,例如:45dF
, 4Dd
. 但我不知道,为什么它可以工作并匹配所有字符:) 我没有字符,它们是 before (?=.*\d)
。我认为,只有这个表达式应该有效:
(与\*
之前的表达)。
你能解释一下吗?
regex - 正则表达式直到但不包括
对于正则表达式,搜索直到但不包括的语法是什么?有点像:
regex - 带有前瞻的正则表达式
我似乎无法使这个正则表达式工作。
输入如下。它确实在一行,但我在每个 \r\n 之后插入了换行符,以便更容易看到,因此不需要检查空格字符。
这可能会在另一个 01-31 和 02-01 继续,标志着另一个新的比赛(这些是日期)。
我希望这个输入总共有 2 个匹配项。我的问题是我无法弄清楚如何向前看并匹配新比赛的开始(两个以下日期),但不包括在第一场比赛中的日期。他们应该属于第二场比赛。
这很难解释,但我希望有人能得到我。这是我到目前为止得到的,但还没有接近:
我想要的比赛是:
之后,我可以轻松地用 \r\n 分隔列。
regex - 正则表达式负前瞻
我正在做一些正则表达式体操。我为自己设定了尝试搜索 C# 代码的任务,其中使用了 as-operator 而不是在合理的空间内进行空检查。现在我不想解析 C# 代码。例如,我想捕获代码片段,例如
但是,不捕获
也不是就此而言
因此,任何随机空检查都将算作“良好检查”,因此不会被发现。
问题是:我如何匹配某些东西,同时确保在其周围环境中找不到其他东西。
我尝试过天真的方法,寻找“as”,然后在 150 个字符内进行负前瞻。
不幸的是,上面的正则表达式匹配了上面所有的例子。我的直觉告诉我,问题是向前看然后做负向前看可以发现很多情况,其中向前看没有找到'== null'。
如果我尝试否定整个表达式,那么这也无济于事,因为它会匹配大多数 C# 代码。
java - Java RegEx 与前瞻失败
在 Java 中,我无法让正则表达式按照我想要的方式运行,并编写了这个小 JUnit 测试来演示这个问题:
除了标有注释的两行外,每一行都通过。除了模式字符串之外,这些分组是相同的。为什么添加不区分大小写会破坏匹配器?
java - 负前瞻正则表达式不起作用
要求:找到"caused"
后跟斜杠后跟任意数量的大写字母的单词 - 并且不跟空格 + "by/IN
。
在上面的例子中,"caused/VBN"
后面跟着" by/IN"
,所以 'caused' 不应该匹配。
"by/IN"
不遵循引起的,所以它应该匹配
caused/[A-Z]+
-- 单词 'caused' + / + 一个或多个大写字母
(?![\\s]+by)
-- 负前瞻 - 不匹配空格和 by
下面是我用来测试的一个简单方法
输出:caused/VB
我不明白为什么我的负前瞻正则表达式不起作用。