标签: lookbehind

替换"<code>"标记内的所有"\"字符*不*

首先第一件事情:无论这个,这个,这个也没有这个回答我的问题.所以我会开一个新的.

请阅读

好吧好吧.我知道正则表达式不是解析一般HTML的方法.请注意,创建的文档是使用受限制的受控HTML子集编写的.撰写文档的人都知道他们在做什么.他们都是IT专业人士!

考虑到控制语法它可以解析我在这里使用正则表达式的文件.

我不是试图从网上下载任意文件并解析它们!

而如果分析失败,文档编辑,所以它会解析.我在这里解决的问题比这更普遍(即不替换其他两个模式中的模式).

一点背景(你可以跳过这个...)

在我们的办公室,我们应该"打印"我们的文档.因此,为什么有些人想出把它全部放入Word文档中.到目前为止,我们还没有到那里.而且,如果我完成这项工作,我们可能不需要.

当前状态(......和此)

文档的主要部分存储在TikiWiki数据库中.我创建了一个daft PHP脚本,它将文档从HTML(通过LaTeX)转换为PDF.所选Wiki系统的必备功能之一是WYSIWYG编辑器.正如预期的那样,我们的文档中存在一个不那么正式的DOM.

因此,我使用"简单"正则表达式对文档进行音译.到目前为止,这一切都很好(大部分)都很好,但我遇到了一个我自己还没想到的问题.

问题

一些特殊字符需要替换为LaTeX标记.对于exaple,\角色应该被替换$\backslash$(除非有人知道另一种解决方案?).

除了在一个verbatim街区!

<code>verbatim部分替换标签.但是,如果此code块包含反斜杠(与Windows文件夹名称的情况一样),则脚本仍会替换这些反斜杠.

我估计我可以使用负面LookBehinds和/或LookAheads来解决这个问题.但我的尝试没有奏效.

当然,我会用一个真正的解析器更好.事实上,这是我的"脑内路线图",但它目前已超出范围.该脚本适用于我们有限的知识领域.创建一个解析器需要我从头开始.

我的尝试

示例输入

The Hello \ World document is located in:
<code>C:\documents\hello_world.txt</code>
Run Code Online (Sandbox Code Playgroud)

预期产出

The Hello $\backslash$ World document is located in:
\begin{verbatim}C:\documents\hello_world.txt\end{verbatim}
Run Code Online (Sandbox Code Playgroud)

这是迄今为止我能想到的最好的:

<?php
$patterns = array(
    "special_chars2" => array( '/(?<!<code[^>]*>.*)\\\\[^$](?!.*<\/code>)/U', '$\\backslash$'), …
Run Code Online (Sandbox Code Playgroud)

php regex latex lookahead lookbehind

4
推荐指数
1
解决办法
688
查看次数

如何使用仍然在字符串开头工作的lookbehind断言来制作正则表达式

我需要模拟\b字符串开头的行为,我在其中添加额外的字符作为字边界.现在我正在使用类似的东西:

"(?<=\\W|\\p{InCJKUnifiedIdeographs})foo"
Run Code Online (Sandbox Code Playgroud)

这是我想要的,除非我在匹配的字符串的开头:在这种情况下断言失败,我没有得到命中.我想要的是相当于匹配,如果我在字符串的开头或者foo前面是非单词字符或表意文字.但我无法得到正确的咒语来支持这一点.

有什么想法吗?或者这不可能吗?

提前致谢.

java regex lookbehind

4
推荐指数
1
解决办法
2944
查看次数

无效的正则表达式错误


我正在尝试检索此字符串" property_id=516&category=featured-properties" 的类别部分,因此结果应为"features-properties",我想出了一个正则表达式并在此网站http://gskinner.com/RegExr/上进行了测试,并且它按预期工作,但是当我将正则表达式添加到我的javascript代码中时,我遇到了"无效的正则表达式"错误,任何人都可以告诉我这是什么搞乱了这段代码?

谢谢!

var url = "property_id=516&category=featured-properties"
var urlRE = url.match('(?<=(category=))[a-z-]+');
alert(urlRE[0]);
Run Code Online (Sandbox Code Playgroud)

javascript regex pattern-matching lookbehind

4
推荐指数
1
解决办法
3381
查看次数

Vim语法区域 - lookbehind混乱

在.vimrc中定义以下内容或在vim命令行中执行:

syn match ndbMethods "[^. \t\n\r]\@<=[_a-z][_a-zA-Z0-9]*(\@="
hi ndbMethods guibg=#222222
Run Code Online (Sandbox Code Playgroud)

在活动缓冲区中使用C样式方法调用查看结果:

foo();
Run Code Online (Sandbox Code Playgroud)

您将看到方法名称的初始字符不匹配.

目的是使lookbehind模式强制.在任何匹配方法的第一个字符之前开始行,文字或空格.

奇怪的是,这使得这是一个负面的前瞻(\@<!)似乎工作!

有人会善意地解释为什么这种外观不正确吗?

regex syntax vim match lookbehind

4
推荐指数
1
解决办法
2200
查看次数

正则表达式,搜索和替换,直到某一点

问题

我有一个充满线条的文件

convert.these.dots.to.forward.slashes/but.leave.these.alone/i.mean.it
Run Code Online (Sandbox Code Playgroud)

我想搜索和替换我得到的

convert/these/dots/to/forward/slashes/but.leave.these.alone/i.mean.it
Run Code Online (Sandbox Code Playgroud)

的.转换为/直到第一个正斜杠

问题

如何编写正则表达式搜索并替换以解决我的问题?

试图解决方案

我尝试使用perl后面的外观,但是没有实现可变长度外观

$ echo "convert.these.dots.to.forward.slashes/but.leave.these.alone/i.mean.it" | perl -pe 's/(?<=[^\/]*)\./\//g'
Variable length lookbehind not implemented in regex m/(?<=[^/]*)\./ at -e line 1.
Run Code Online (Sandbox Code Playgroud)

解决方法

实现了可变长度的前瞻,因此您可以使用这个肮脏的技巧

$ echo "convert.these.dots.to.forward.slashes/but.leave.these.alone/i.mean.it" | rev | perl -pe 's/\.(?=[^\/]*$)/\//g' | rev
convert/these/dots/to/forward/slashes/but.leave.these.alone/i.mean.it
Run Code Online (Sandbox Code Playgroud)

有没有更直接的解决方案来解决这个问题?

regex perl lookbehind

4
推荐指数
1
解决办法
1416
查看次数

带有后视功能的正则表达式无法使用 re.match

以下python代码:

import re

line="http://google.com"
procLine = re.match(r'(?<=http).*', line)
if procLine.group() == "":
    print(line + ": did not match regex")
else:
    print(procLine.group())
Run Code Online (Sandbox Code Playgroud)

匹配不成功,输出如下错误:

回溯(最近一次调用):文件“C:/Users/myUser/Documents/myScript.py”,第 5 行,如果 procLine.group() ==“”:AttributeError: 'NoneType' 对象没有属性 'group '

当我只用 .* 替换正则表达式时,它工作正常,这表明它是错误的正则表达式,但是,在https://regex101.com/ 上,当我测试我的正则表达式和 python 风格的字符串时,它似乎匹配得很好。

有任何想法吗?

python regex string lookbehind

4
推荐指数
1
解决办法
1122
查看次数

为什么在某些风格的外观工作中没有有限的重复?

我想从dd/mm/yy格式的日期解析中间的2位数字,但也允许日期和月份的单个数字.

这就是我想出的:

(?<=^[\d]{1,2}\/)[\d]{1,2}
Run Code Online (Sandbox Code Playgroud)

我想要一个带有1或2位数字[\d]{1,2}的1位或2位数字,并^[\d]{1,2}\/在它前面斜线.

这并不对许多组合工作,我已经测试10/10/10,11/12/13等...

但令我惊讶的是(?<=^\d\d\/)[\d]{1,2}工作.

[\d]{1,2}如果\d\d这样做也应该匹配,或者我错了?

c# python java regex lookbehind

3
推荐指数
1
解决办法
619
查看次数

Lookbehind从一个字符串的结尾开始

我确信之前一定要问过,但由于某些原因,在档案中找到正则表达式问题的答案对我来说特别困难.

我想从字符串的末尾开始做一个lookbehind.

示例字符串:

"This is a string with lots of white space_and-other.stuff"
Run Code Online (Sandbox Code Playgroud)

我只想要字符串中具有最后一个空格的部分.到目前为止,我有以下内容:

(?<=\s).+$
Run Code Online (Sandbox Code Playgroud)

这给了我第一个空格后的所有内容,即使我匹配字符串的结尾.我的问题根源必须与lookbehinds必须是预定义数量的字符有关,但我不知道怎么做没有lookbehind.

regex lookbehind

3
推荐指数
1
解决办法
179
查看次数

为什么JavaScript没有外观?

我知道有各种解决办法,但似乎奇怪的是JavaScript中没有一个非常常见/有用的正则表达式功能.

是否有任何理由(性能问题,实施问题等)或者是否在开始时没有添加,现在为时已晚/不需要?

javascript regex negative-lookbehind missing-features lookbehind

3
推荐指数
1
解决办法
380
查看次数

Notepad++ 正则表达式查找/替换使用 Look Behind 不起作用

我有以下 CSS 标记。

.previous-container{
    float:left;
}
.primary-commands {
    float:right;
}
Run Code Online (Sandbox Code Playgroud)

使用正则表达式语法搜索,(?<=[\s,;])([a-zA-Z\-]+):它会按预期突出显示 CSS 属性名称,但是,单击“替换”后,不会替换任何内容。我尝试在替换行中使用组标记语法,例如$[nth group]和任何纯文字字符串替换。无论我如何尝试,它都不会用任何内容替换匹配的字符串。我使用的是记事本++版本6.7.5。也许我在这里缺少一些明显的东西?

regex search replace notepad++ lookbehind

3
推荐指数
1
解决办法
2427
查看次数