\b\w+(?<!s)\b.这绝对不一样\b\w+[^s]\b.适用时Jon's,前者将匹配Jon后者Jon'(包括撇号).我会留给你弄清楚原因.(提示:\ b匹配撇号和s).后者也不会匹配像"a"或"I"这样的单字母单词.
你能解释一下原因吗?
此外,你能说清楚exacly \b做了什么,以及为什么它在撇号和s?之间匹配?
我有一个CSV文件中的一行"作为字段封面和,字段分隔符作为字符串.有时"数据中会破坏字段封闭程序.我正在寻找一个正则表达式来删除这些".
我的字符串看起来像这样:
my $csv = qq~"123456","024003","Stuff","","28" stuff with more stuff","2"," 1.99 ","",""~;
Run Code Online (Sandbox Code Playgroud)
我看过这个,但我不明白怎么告诉它只删除那些引号
,,我设法告诉它使用这行代码同时删除3和4:
$csv =~ s/(?<!,)"(?!,)//g;
Run Code Online (Sandbox Code Playgroud)
但是,由于前瞻和后视两者都不喜欢被写成,因此我无法适应^并且$在那里(?<!(^|,)).
除了拆分字符串并从每个元素中删除引用之外,有没有办法实现这一目的只有正则表达式?
我需要按照以下要求制作正则表达式:
给出示例文本:
SEARCH_TERM_#1 find this text SEARCH-TERM_#2_more text_SEARCH-TERM_#3
SEARCH_TERM_#1 find this text SEARCH-TERM_#3
Run Code Online (Sandbox Code Playgroud)
我想提取出现在该find this text区域的字符串
正则表达式应该在SEARCH_TERM_#1最多但不包括SEARCH_TERM_#2或者SEARCH-TERM_#3首先出现之后收集数据.它应该选择作为"右侧"搜索边界,无论它首先发现#2和#3.
我试过(?>SEARCH_TERM_#2|SEARCH_TERM_#3) (?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))和(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3)).并且它们全部包括第二个搜索项到收集的数据中并在第三个之前停止,而我希望收集的数据在#2或#3之前停止.
Source: <prefix><content1><suffix1><prefix><content2><suffix2>
Engine: PCRE
RegEx1: (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2: (?<=<prefix>)(.*)(?=<suffix2>)
Result1: <content1>
Result2: <content1><suffix1><prefix><content2>
Run Code Online (Sandbox Code Playgroud)
RegEx2 的期望结果只是 <content2> 但它显然是贪婪的。如何使 RegEx2 不贪婪并仅使用最后一个匹配的lookbehind?
[我希望我从 NoteTab 语法正确翻译了这个。我不做太多的 RegEx 编码。<prefix>、<content> 和 <suffix> 术语仅用于表示任意字符串。只有“?<=”lookbehind 命令中的“<”是重要的。]
我怀疑这很简单,但经过太多小时的搜索,我放弃了自己解决。
谢谢您的帮助
艺术
我正在尝试使用语法高亮构建一个非常具体的编辑器.我用简单的正则表达式制作了所有简单的东西,但是现在我想用正则表达式添加一些高级功能.
在这种情况下,我想知道是否在任何JumpTo命令上使用了已定义的标记.
例:
Define1,Command,Command
Define2,Command,Command,JumpTo4
Define3,Command,Command,JumpTo1
Define4,Command,Command
Run Code Online (Sandbox Code Playgroud)
这里的目标是要找到每一个定义(Definexxx)由一个引用JumpTo(一个或多个)可以说,它是前或后定义.在另一步骤我也想找到任何定义不是由任何引用JumpTo.
我已经尝试过表达" 定义(?<tag>\d +)(?= JumpTo\k <tag>) "以获得积极的前瞻.我希望它会找到" Define1 ",但它没有(无论是否有多行选项).
这可能是一步完成Regex,还是我应该放弃这个想法,只考虑两步法?
我有这样的输入字符串:
left/1234567890
Run Code Online (Sandbox Code Playgroud)
正则表达式:
(left(?<=/)[0-9]{10}?)
Run Code Online (Sandbox Code Playgroud)
我想得到这样的结果:1234567890.但它不起作用.
虽然,下一个输入字符串:
/1234567890
Run Code Online (Sandbox Code Playgroud)
使用下一个正则表达式:
((?<=/)[0-9]{10}?)
Run Code Online (Sandbox Code Playgroud)
得到预期的结果:1234567890.
给出Javascript中的字符串
{include} {花括号}中的任何内容,但不会像{this}那样进行转义,并且适用于{brace}的任何位置
我想要检索
我一直试图找到一种方法,但没有看后面我很难过.
最重要的是不要获取转义的{}内容.如果有必要的话,我可以选择包括比赛中的大括号的东西.
不幸的是,到目前为止我所做的只是一个这样的表达
(?:[^//]){.*?}
Run Code Online (Sandbox Code Playgroud)
但如果{位于目标文本的开头,则不匹配.
谁能帮我?谢谢.
使用split()分割字符串,并根据该字符串创建一个数组,以使单词和数字分开。
我知道前瞻和后瞻需要用于零宽度拆分,因此我使用了它。
$string = 'A1BB22CCC333DDDD';
@string = split(/(?=\d+)|(?<=\d+)/,$string);
print "@string";
Run Code Online (Sandbox Code Playgroud)
期望:
A 1 BB 22 CCC 333 DDDD
Run Code Online (Sandbox Code Playgroud)
但是结果:
在jdoodle.pl第2行的regex m /(?= \ d +)|(?<= \ d +)/中未实现可变长度后向。
命令以非零状态255退出。
我写了一个简单的正则表达式
String s = "#!key1 #!compound.key2 #!super.compound.key3";
Matcher matcher = Pattern.compile("(?<=#!)(\\w+\\.*\\w+)+").matcher(s);
while (matcher.find()) {
System.out.println(matcher.group());
}
Run Code Online (Sandbox Code Playgroud)
导致
key1
compound.key2
super.compound
Run Code Online (Sandbox Code Playgroud)
我想知道为什么匹配super.compound,但不super.compound.key3符合我的预期。
key1
compound.key2
super.compound.key3
Run Code Online (Sandbox Code Playgroud)
欢迎对正则表达式进行任何改进。
我试图在 perl 中的元素之间的空格上分割一个字符串。但是,每个元素也可能包含空格(通过双引号或括号括起来)。
例如,一个字符串包含:
for element in hydrogen helium "carbon 14" $(some stuff "here") FILE
Run Code Online (Sandbox Code Playgroud)
我想最终得到一个像 (hydrogen, helium, "carbon 14", "$(some stuff "here")", FILE)
我可以处理这个for element in位并将其余的作为一个字符串。我试过做
@elements = split /(?<=\"[^\"]*\")\s+(?=\"[^\"]*\")/, $list
Run Code Online (Sandbox Code Playgroud)
虽然正则表达式只匹配引号之间的空格(在 regexr.com 上检查),但 perl 程序给了我Lookbehind longer than 255 not implemented in regex.
是否有更好的使用split空白的方法可以考虑到这一点?我的正则表达式做错了什么?
lookbehind ×10
regex ×8
lookahead ×4
perl ×3
split ×2
.net ×1
alternation ×1
c# ×1
java ×1
javascript ×1
lookaround ×1
non-greedy ×1
substitution ×1
whitespace ×1