首先第一件事情:无论这个,这个,这个也没有这个回答我的问题.所以我会开一个新的.
好吧好吧.我知道正则表达式不是解析一般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) 我需要模拟\b字符串开头的行为,我在其中添加额外的字符作为字边界.现在我正在使用类似的东西:
"(?<=\\W|\\p{InCJKUnifiedIdeographs})foo"
Run Code Online (Sandbox Code Playgroud)
这是我想要的,除非我在匹配的字符串的开头:在这种情况下断言失败,我没有得到命中.我想要的是相当于匹配,如果我在字符串的开头或者foo前面是非单词字符或表意文字.但我无法得到正确的咒语来支持这一点.
有什么想法吗?或者这不可能吗?
提前致谢.
我正在尝试检索此字符串" 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) 在.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模式强制.在任何匹配方法的第一个字符之前开始行,文字或空格.
奇怪的是,这使得这是一个负面的前瞻(\@<!)似乎工作!
有人会善意地解释为什么这种外观不正确吗?
我有一个充满线条的文件
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)
有没有更直接的解决方案来解决这个问题?
以下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 风格的字符串时,它似乎匹配得很好。
有任何想法吗?
我想从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这样做也应该匹配,或者我错了?
我确信之前一定要问过,但由于某些原因,在档案中找到正则表达式问题的答案对我来说特别困难.
我想从字符串的末尾开始做一个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.
我知道有各种解决办法,但似乎奇怪的是JavaScript中没有一个非常常见/有用的正则表达式功能.
是否有任何理由(性能问题,实施问题等)或者是否在开始时没有添加,现在为时已晚/不需要?
javascript regex negative-lookbehind missing-features lookbehind
我有以下 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。也许我在这里缺少一些明显的东西?