我正在寻找以以下格式创建的大文本块中的文本区域:
...
[region:region-name]
multi line
text block
[/region]
...
[region:another-region-name]
more
multi-line text
[/region]
Run Code Online (Sandbox Code Playgroud)
我几乎解决了这个问题
\[region:(?'link'.*)\](?'text'(.|[\r\n])*)\[/region\]
Run Code Online (Sandbox Code Playgroud)
如果我在整个文本中只有一个区域,这会起作用。但是,当有多个时,这只会给我一个块,其中包含在该块的“文本”中的所有其他“区域”。我有一种感觉,这将使用负面展望来解决,但作为正则表达式的非专业人士,我不知道如何修改上述内容以正确处理。有人可以帮忙吗?
在 Bash 4.1 机器上,
我正在尝试使用“双括号”[[ expression ]]来使用“ NEGATIVE LOOKAHEAD ”进行正则表达式比较。
我做了“ set +H”来禁用 BASH 变量' !'扩展命令历史搜索。
我想匹配“任何字符串”,除了“ arm-trusted-firmware ”。
set +H
if [[ alsa =~ ^(?!arm-trusted-firmware).* ]]; then echo MATCH; else echo "NOT MATCH"; fi
Run Code Online (Sandbox Code Playgroud)
我希望这会打印“MATCH”,但它会打印“NOT MATCH”。
查看“双括号”的返回码后,它返回“2”:
set +H
[[ alsa =~ ^(?!arm-trusted-firmware).* ]]
echo $?
Run Code Online (Sandbox Code Playgroud)
根据 bash 手册,返回值 '2' 表示“正则表达式在语法上不正确”:
可以使用额外的二元运算符 =~,其优先级与 == 和 != 相同。
使用时,运算符右侧的字符串被视为扩展正则表达式并进行相应匹配(如 regex(3) 中所示)。
如果字符串与模式匹配,则返回值为 0,否则为 1。如果正则表达式在语法上不正确,则条件表达式的返回值为 2。
我做错了什么?
在我的原始脚本中,我正在与 STRING 列表进行比较。
当它匹配时,我触发一些函数调用;
当它不匹配时,我会跳过我的动作。
所以,是的,从这个例子中, …
Medicare资格EDI示例回应是我想要匹配的.
我有一个看起来像这样的字符串:
LN:SMITHbbbbbbbbFN:SAMANTHAbbBD:19400515PD:1BN:123456PN:9876543210GP:ABCDEFGHIJKLMNOID:123456789012345bbbbbPC:123PH:8005551212CD:123456PB:123ED:20060101TD:2070101LC:NFI:12345678FE:20070101FT:20080101
我需要一组看起来像这样的匹配:
Key | Value ------------------- LN | SMITHbbbbbbbb FN | SAMANTHAbb BD | 19400515 ... etc
我整天都在处理这个问题,而且似乎无法获得可接受的匹配方案.我打算用for循环编程它,如果我想不出来就找到冒号的索引.
我尝试过使用负向前瞻,但我没有到达任何地方.这是C#,我正在测试时使用这个测试器(.Net)和The Regex Coach(非.Net).
我试过用这个:
([\w]{2})\:(?![\w]{2}\:)
Run Code Online (Sandbox Code Playgroud)
但这只匹配键和它们的冒号,如"LN:","FN:"等.
如果我使用:
([\w]{2})\:(.+?)([\w]{2})\:
Run Code Online (Sandbox Code Playgroud)
它也消耗下一个匹配的两个字符键和冒号,导致我只匹配每个其他键/值对.
有没有办法让我在.Net中使用RegEx正确匹配这些,或者我是否坚持使用更程序化的解决方案?请记住,我不能认为键总是大写字母.它们可能包含数字,但它们总是两个字符,然后是冒号.
提前感谢您提供的任何帮助.
match.matches()返回false.这很奇怪,因为如果我把这个正则表达式和测试字符串带到rubular.com,则会显示两个匹配项.我究竟做错了什么?
Pattern regex = Pattern.compile("FTW(((?!ODP).)+)ODP");
Matcher match = regex.matcher("ZZZMMMJJJOOFTWZMJZMJODPZZZMMMJJJOOOFTWMZJOMZJOMZJOODPZZZMMMJJJOO");
if (match.matches()) {
System.out.println("match found");
}
else {
System.out.println("match not found");
}
Run Code Online (Sandbox Code Playgroud) perl负向前视不适用于大字符串(长度> 40000,在活动perl和cygwin perl,版本5.14).我尝试了相同的代码,mingw perl 5.8.8它停止工作长度> 5000的字符串.
我使用的代码是:
my $str = q(A B);
my $pattern = '(A)(?:(?!(X)).)*(B)';
if ( $str =~ m/$pattern/ ) {
print "matched\n";
}
Run Code Online (Sandbox Code Playgroud)
这适用于perl的所有三个版本.但是当我通过添加空格来增加字符串的长度时,模式会停止匹配.
例如: my $str = q(A ...some 50000 spaces... B);
请帮助.
我有一些JSON代码,格式如下:
[
{ "abc ": "d ef", "g": "h i", "jk lm no": "pq", "r st": "uvw xyz" },
{ "!1 2": " 3", "4 ": "5 6 7", " 8 ": "9 abc", "def": "hi "NAME" jk" },
...
]
Run Code Online (Sandbox Code Playgroud)
我需要在"NAME"中的引号前添加反斜杠才能正确解析此JSON.所以我需要上面的字符串看起来像这样:
[
{ "abc ": "d ef", "g": "h i", "jk lm no": "pq", "r st": "uvw xyz" },
{ "!1 2": " 3", "4 ": "5 6 7", " 8 ": "9 abc", "def": "hi \"NAME\" jk" }, …Run Code Online (Sandbox Code Playgroud) 我有此正则表达式表达式,用于搜索电话号码模式:
[(]?\d{3}[)]?[(\s)?.-]\d{3}[\s.-]\d{4}
Run Code Online (Sandbox Code Playgroud)
这与以下格式的电话号码匹配:
123 456 7890
(123)456 7890
(123) 456 7890
(123)456-7890
(123) 456-7890
123.456.7890
123-456-7890
Run Code Online (Sandbox Code Playgroud)
我想扫描整个页面(使用JavaScript)以查找此匹配项,但不包括锚点中已存在的此匹配项。找到匹配项后,我要将电话号码转换为移动设备的点击通话链接:
(123) 456-7890 --> <a href="tel:1234567890">(123) 456-7890</a>
Run Code Online (Sandbox Code Playgroud)
我很确定我需要做一个否定查询。我已经尝试过了,但这似乎不是正确的主意:
(?!.*(\<a href.*?\>))[(]?\d{3}[)]?[(\s)?.-]\d{3}[\s.-]\d{4}
Run Code Online (Sandbox Code Playgroud) 查询:
select 1 "val" from dual where regexp_like('ITEM HEIGHT','^(?!ICON).*HEIGHT$');
Run Code Online (Sandbox Code Playgroud)
上面的查询没有返回我1。请让我知道如何使用oracle实现负前瞻regexp_like()。
注意:请不要在查询中提出任何建议,我很想知道正确的正则表达式可以接受regexp_like()否定超前。而且[^]似乎只逐个字符地求反,而不是整个字符串。
我想测试不包含特定子字符串的字符串
示例字符串是:
event2
event23,event1,event67=12
event1,event30
event23
event2
event2,event23
Run Code Online (Sandbox Code Playgroud)
我想匹配不包含event2.
因此,以下字符串应该匹配:
event23,event1,event67=12
event1,event30
event23
到目前为止,我可以event2使用以下表达式匹配 do 包含的字符串:
/^.*(\bevent2\b)/gm
但我不知道如何将其与负面前瞻结合起来。
这似乎不起作用:
/^.*(?!.*(\bevent2\b))/gm
(如果你能做出更好的头衔,请做)
嗨,
我需要确保字符串匹配以下正则表达式:
^[0-9a-zA-Z]{1}[0-9a-zA-Z\.\-_]*$
(Starts with a letter or number, then any number of letters, numbers, dots, dashes or underscores)
Run Code Online (Sandbox Code Playgroud)
但鉴于此,我需要确保它与Guid不匹配,我的Guid匹配reg-ex看起来像这样(显然,这需要在合并结果中否定):
^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$
Run Code Online (Sandbox Code Playgroud)
这里的最后一个要求是它们必须(如果可能的话)合并为单个表达式.
考虑两种printk函数调用 -
TRACE_BR(TRACE , "END. rc = %d\n", rc );
TRACE_BR(TRACE, "Value = %s", string );
Run Code Online (Sandbox Code Playgroud)
我正在编写一个正则表达式来匹配像上面这样的函数调用,它们%内部包含字符串参数,但如果字符串END也在里面则不应该匹配.
我用这样的负面预测
TRACE_BR\(TRACE.*?(?!END)%.*
Run Code Online (Sandbox Code Playgroud)
我希望这个正则表达式只匹配第二个函数调用,但它也匹配第一个函数调用.
我猜我在贪婪的地方出错了*.
什么正则表达式会正确匹配这个?我想识别不以特定文本结尾的字符串(_array).我试图使用负向前瞻但无法使其正常工作.(注意显而易见的答案是反向(m {_array $}),但有一个原因我不想这样做).TIA
use strict;
use warnings;
while(<DATA>) {
#
## If the string does not end with '_array' print No, otherwise print Yes
m{(?!_array)$} ? print "No = " : print "Yes = ";
print;
}
__DATA__
chris
hello_world_array
another_example_array
not_this_one
hello_world
Run Code Online (Sandbox Code Playgroud)
我想要的输出应该是:
No = chris
Yes = hello_world_array
Yes = another_example_array
No = not_this_one
No = hello_world
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,我想替换所有不跟随/跟随任何其他i的'i',并将其替换为'z`.我知道有负面的前瞻和后视.
结果应该是:
i => z
iki => zkz
iiki => iikz
ii => ii
iii => iii
Run Code Online (Sandbox Code Playgroud)
我试着用这个:
/(?<!i)i(?!i)/gi
Run Code Online (Sandbox Code Playgroud)
它失败并抛出一个错误:Invalid regex group.
然而
/i(?!i)/gi
Run Code Online (Sandbox Code Playgroud)
工作正常,但匹配第二个"我":"ii".
还有其他方法吗?
如果有的话,对JS中的lookbehind的支持是什么?