问题标签 [negative-lookahead]

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.

0 投票
4 回答
362 浏览

python - 使用正则表达式搜索关键字附近的 HTML 链接

如果我正在寻找关键字“sales”并且我想获得最近的“http://www.somewebsite.com”,即使文件中有多个链接。我想要最近的链接而不是第一个链接。这意味着我需要搜索关键字匹配之前的链接。

这行不通...

regex = (http|https)://[-A-Za-z0-9./]+.*(?!((http|https)://[-A-Za-z0-9./]+))sales sales

找到最接近关键字的链接的最佳方法是什么?

0 投票
1 回答
315 浏览

php - PHP 正则表达式标题转换/负前瞻/toLowerCase

我正在尝试将我的 html 页面中的一些标题转换为<h2>. 图案很简单。

基本上,抓住任何介于两者之间<p><strong></strong></p>的大写字母。很简单,所以这里是复杂的一点。

首先,我需要做一个例外。<p><strong>CP</strong></p>不得转换为<h2>. 我尝试?!(CP)在之后立即添加,<p><strong>但它不起作用。

其次,我需要能够将第一个字母大写。当我在 preg_replace (例如:)上使用“ucfirst”和“strtolower”时ucfirst(strtolower(preg_replace($pattern, $replacement, $test)));,它会使字符串中的所有字符变为小写,并且 ucfirst 不起作用,因为它检测到“<”是第一个字符。

任何提示,或者我什至朝着正确的方向前进?


编辑

感谢您的帮助,使用preg_replace_callback. 我发现我所有的标题都超过 3 个字符,所以我添加了限制器。还添加了特殊字符。这是我的最终代码:

0 投票
3 回答
824 浏览

php - PHP preg_match 一切直到

我有一个博客条目,有时会包含很多文本/图像,我想从该博客中截取一段。更具体地说,我想匹配所有内容,直到第二个图像标签之后

下面是一些示例文本。

我尝试过像这样的负面预测

但我想不出一种方法将前瞻应用于“+”修饰符。谁有任何线索,我将不胜感激。

0 投票
3 回答
176 浏览

python - pywikipedia(python)正则表达式在缺少时添加字符串

我有一组记录,例如:

姓名

  • 姓名保罗·贝瑞:现在
  • 地址乔治·内基:不存在
  • 姓名鲍勃·范巴斯滕:现在
  • 姓名 Richard Von Rumpy:不存在
  • 名字爸爸徽章:不存在
  • 姓名保罗·贝瑞:现在
  • Street George Necky:不存在
  • 街头鲍勃·范巴斯滕:现在
  • 姓名 Richard Von Rumpy:不存在
  • 城市爸爸徽章:不存在

我希望所有以Name开头的记录都采用这种形式

  • 姓名姓名 姓: 不存在

以其他词开头的记录保持原样。

即我想将字符串“not”添加到以Name开头的记录中,但它不是。我正在使用 python (pywikipediabot)

但即使它已经存在,它也会添加“不”。

也许我还没有理解否定的前瞻语法?

0 投票
3 回答
5720 浏览

regex - 正则表达式:两个匹配项之间的负前瞻

我正在尝试构建一个有点像这样的正则表达式:

这似乎适用于消极的前瞻性,但是当我遇到这样的情况时遇到了问题:

我希望上面的句子匹配,但是第一个和第二个匹配的单词之间的否定前瞻“溢出”,所以第二个单词永远不会匹配。

让我们看一个实际的例子。

我不想匹配每个包含单词“i”和单词“pie”的句子,但不匹配这两个单词之间的单词“hate”。我有这三句话:

我有这个正则表达式:

匹配第一句,但不匹配第二句,因为否定前瞻扫描整个字符串。

有没有办法限制负前瞻,让它在遇到“仇恨”之前遇到“馅饼”就满足了?

注意:在我的实现中,这个正则表达式后面可能还有其他术语(它是从语法搜索引擎动态构建的),例如:

我目前正在使用 JRegex,但如有必要可能会切换到 JDK Regex

更新:我忘了在我最初的问题中提到一些东西:

句子中可能存在“否定结构”,如果可能的话,即使“否定”结构存在更远的位置,我也确实希望匹配该句子。

为了澄清,看看这些句子:

rob 的答案非常适合这个额外的约束,所以我接受了那个。

0 投票
1 回答
26953 浏览

python - 负前瞻 python 正则表达式

当字符串'02 d0'没有出现在字符串中的特定位置时,我想正则表达式匹配一个字节序列。这个两个字节的字符串不能出现的位置是字节位置 6 和 7,从右侧的第 0 个字节开始。

这是我一直用于测试的:

我查看了这个示例,但该方法的限制比我需要的要少。有人可以解释为什么我只能在负前瞻位于字符串末尾时才能正确匹配吗?当这个特定位位置没有出现“02 d0”时,我需要做什么来匹配?

0 投票
3 回答
642 浏览

java - 带有负前瞻的 Java 正则表达式

我在用 Java 编写正则表达式来解析日志文件中的信息时遇到了一些麻烦。

我有一个字符串,其中结构“timeinstant:一些带有任何字符的字符串”重复了 1 到 N 次。

timeinstant 的格式为“dd/mm/yyyy hh:MM:ss:MMMMMM”(M 为微秒)。

我正在尝试做的是找到传入字符串中包含的最后一个 timeinstant 的微秒。

例如,使用字符串

我想 m.find()指出"987: pump..."。为了得到这个,我使用带有前瞻的正则表达式:

"(\\d{3}:)(?!\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}:\\d{6})"

但是现在m.find()指向819(包含在2012/04/02 16:28:51:861819)。

0 投票
1 回答
4781 浏览

php - PHP Regex - 如果匹配包含单词(字符串)则否定匹配

我已经尝试了很多方法来做到这一点,唯一似乎部分做我想要的方法是使用正则表达式的字符串否定如何在正则表达式中否定特定单词中描述的前瞻否定?但我无法让它与我当前的正则表达式一起使用。

假设我有这个字符串:

编辑:更深入的字符串不应该返回匹配的调试:

和当前的正则表达式模式:

编辑:我正在使用以下正则表达式(没有 # 和 #is)在 Regex Buddy 上对其进行调试:

(这两个正则表达式应该对我的应用程序有相同的效果,因为我可以轻松地调整它,所以如果它更有意义,请使用后者)

将匹配字符串中的两行。当and[spoiler]之间有字符串时,我希望它不返回匹配项。[url=xxxx://yyyy][/url]

我认为它可以通过负前瞻来完成,但我似乎无法找到一种方法将其插入当前的正则表达式而不使其无法使用。

任何帮助表示赞赏。

0 投票
3 回答
3121 浏览

asp.net - ASP.NET 中用于 \*、\|、\^、\~ 的正则表达式验证器

我想确保用户没有输入任何这些字符串:\*or\|\^or \~

我将在 ASP.Net 页面中为此使用什么正则表达式,并且 ASP.Net 正则表达式验证器是否会使用客户端正则表达式在服务器端自动验证,或者我需要编写服务器端验证代码?

***允许

^|*~允许

\**不允许

\^\|*\~不允许

0 投票
4 回答
2332 浏览

regex - 为什么这个正则表达式前瞻不起作用?

我正在设计一个正则表达式以在某些 IIS Url Rewrites 中使用。目的是捕获以下网址:

  1. 不只是根目录中的一个文件(通过包含句点来标识),并且
  2. 不包含查询字符串,并且
  3. 不属于一组特定的子目录,特别是“Account”和“Public”

我当前的正则表达式看起来像:

RegexPal与以下测试集一起使用:

我的正则表达式正确地忽略了前两种情况,但它仍然匹配第三种情况。这里的前瞻有什么问题?