相关疑难解决方法(0)

Tempered Greedy Token - 在负前瞻之前放置点有什么不同

<table((?!</table>).)*</table>
Run Code Online (Sandbox Code Playgroud)

但是,匹配我的所有表格标签

<table(.(?!</table>))*</table>
Run Code Online (Sandbox Code Playgroud)

才不是.第二个似乎是有意义的,如果我试图用文字写出表达,但我无法理解第一个.

有人可以向我解释一下这个区别吗?

作为参考,我从这里得到了"Tempered Greedy Token"这个术语:http://www.rexegg.com/regex-quantifiers.html#tempered_greed

regex eclipse

16
推荐指数
3
解决办法
2334
查看次数

与具有量化替代方案的较短正则表达式符号相比,展开循环的优势是什么?

要求:两个表达式,exp1exp2,我们需要匹配两者中的一个或多个。所以我想出了,

(exp1 | exp2)*
Run Code Online (Sandbox Code Playgroud)

但是在某些地方,我看到以下正在使用,

(exp1 * (exp2 exp1*)*)
Run Code Online (Sandbox Code Playgroud)

两者有什么区别?你什么时候会使用一个?

希望小提琴能让这更清楚,

var regex1 = /^"([\x00-!#-[\]-\x7f]|\\")*"$/;
var regex2 = /^"([\x00-!#-[\]-\x7f]*(\\"[\x00-!#-[\]-\x7f]*)*)"$/;

var str = '"foo \\"bar\\" baz"';
var r1 = regex1.exec(str);
var r2 = regex2.exec(str);
Run Code Online (Sandbox Code Playgroud)

编辑:当我们捕获组时,这两个方法之间的行为似乎有所不同。第二种方法捕获整个字符串,而第一种方法仅捕获最后一个匹配组。请参阅更新的小提琴

javascript regex

5
推荐指数
2
解决办法
1122
查看次数

正则表达式查找和替换冒号中的表情符号名称

我正在尝试编写一个正则表达式(用于 JavaScript 的正则表达式引擎),我可以使用它在文本中查找和替换冒号内的表情符号名称。就像在 Slack 或 Discord 中键入时一样,:smiley-face:当您提交聊天时它会替换它。我只针对文本节点,所以我不需要担心文本中的其他 html。

是否可以编写一个可以匹配以下所有规则的正则表达式?(用等宽块突出显示的文本 = 正则表达式正匹配)

:any-non-whitespace:
:text1:sample2:
:@(1@#$@SD: :s:
:nospace::inbetween:因为中间
:nospace:中间有2个冒号:nospace:

我从这样的事情开始,但它不完整

/:(?!:)\S+:/gim
Run Code Online (Sandbox Code Playgroud)

我试图考虑所有可能发生的特殊情况。可能是我多虑了。

涉及很多 Twitch 表情,所以我不能使用 emoji unicode 字符。正则表达式将查找匹配项并替换为标签

javascript regex emoji

5
推荐指数
1
解决办法
3240
查看次数

我可以进一步提高这个正则表达式的性能吗?

我试图从线程转储文件中获取线程名称.线程名称通常包含在每个线程转储的第一行的"双引号"中.它可能看起来很简单如下:

"THREAD1" daemon prio=10 tid=0x00007ff6a8007000 nid=0xd4b6 runnable [0x00007ff7f8aa0000]
Run Code Online (Sandbox Code Playgroud)

或者大到如下:

"[STANDBY] ExecuteThread: '43' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007ff71803a000 nid=0xd3e7 in Object.wait() [0x00007ff7f8ae1000]
Run Code Online (Sandbox Code Playgroud)

我写的正则表达式很简单:"(.*)".它将双引号内的所有内容作为一组捕获.但是它会导致沉重的回溯,因此需要很多步骤,可以看出这里.在口头上,我们可以将此正则表达式解释为"捕获任何包含在双引号内的任何内容"

所以我提出了另一个正则表达式,它执行相同的操作:"([^\"])".在口头上,我们可以将此正则表达式描述为"捕获双引号内包含的任意数量的非双引号字符".我没有发现任何快速正则表达式.它不执行任何回溯,因此它需要最少的步骤,可以看出这里.

我把这个告诉了我的同事.他想出了另一个:"(.*?)".我没弄明白它是如何工作的.它执行相当大的比第一个少回溯但比第二个可以看出慢一点这里.然而

  • 我不明白为什么回溯会提前停止.
  • 我理解的?是量词,意思是once or not at all.但是我不明白如何once or not at all在这里使用.
  • 事实上,我无法猜测我们如何口头描述这个正则表达式.

我的同事试图解释我,但我仍然无法完全理解它.谁能解释一下?

java regex performance

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

查找并替换双引号之间的换行符

我有一个 CSV 文件,其中包含一些值中的换行符。例如:

"Chiffre","Nom","Descriptif court","Tarifs en clair","Période en clair","Adresse 1","CP","Tel","Site","Facebook","Pictos","@Saveurs","@Famille plus","@Img","Accessible en fauteuil roulant en autonomie","Handicapes","Terrasse","Wifi","Chèque Vacances","Titre Restaurant"
6,"Le Chalet d'en Ô","Cuisine traditionnelle (foie gras, magret myrtilles, croustillant chocolat)
Spécialités savoyardes (fondue, tartiflette.. )
Garanti sans burgers.
Tout est fait maison.Cuisine traditionnelle (foie gras, magret myrtilles, croustillant chocolat)
Spécialités savoyardes (fondue, tartiflette.. )
Garanti sans burgers.
Tout est fait maison.","Menu adulte : de 20 à 30 €
Menu enfant : 10 €.

Suggestion du jour le midi en semaine : …
Run Code Online (Sandbox Code Playgroud)

javascript regex csv search-regex

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

如何消除此正则表达式的缓慢性?

我有以下正则表达式:

(\d+\s+[-]\s+.*?(?=\s+-)|\d+\s+[-].*)
Run Code Online (Sandbox Code Playgroud)

正则表达式将使用此文本

"Option 01 - Random phrase - Top Menu",
"Option 02 - Another Random Phrase - Su Menu",
"Option 03 - More 01 Phrase - Menu",
"Option 04 - More Phrase -",
"Option 05 - Simple Phrase"
Run Code Online (Sandbox Code Playgroud)

要这样住

01 - Random phrase ",
02 - Another Random Phrase ",
03 - More 01 Phrase ",
04 - More Phrase ",
05 - Simple Phrase ",
Run Code Online (Sandbox Code Playgroud)

此Regex的功能是在开头加上破折号,然后在最后一个破折号前加上数字。例如:

  • dfhdjfhdjf 01-文字 -dkfdçsjf

当最终没有踪迹时,基本上会发生这种情况:

  • dfhdjfhdjf 01-文本文本dkfdçsjf

但是,在regex101.com上调试此正则表达式会导致您需要63到122个步骤。也就是说,此正则表达式非常慢。

在批评这个问题之前,我已经阅读了正则表达式的所有文档,我想让您知道我所指的是特定术语..一个需要解决的问题。毕竟,这不是网站吗? …

regex

-1
推荐指数
1
解决办法
86
查看次数

仅删除上一封电子邮件的开头

我想知道如何删除电子邮件中上一条消息的任何标题。有一个消息示例:

Something above

-----Message d'origine-----
De : Myself <myself@himself.com>
Envoyé : vendredi 8 mars 2019 14:30
À : Someone <someone@himself.com>
Cc : AnotherGuy <another@himself.com>
Objet : My bad I forgot how to do it

Hi,

blabla
Run Code Online (Sandbox Code Playgroud)

而且我需要删除-----Message d'origine-----和之间以及之前carriage returnempty new line之前的所有内容"Hi,"

我已经尝试过以下正则表达式:

-----Message d'origine-----[\s\S]*?[\r\n]
Run Code Online (Sandbox Code Playgroud)

但仅-----Message d'origine-----匹配而没有下面的其他行。但是,如果我改用"Hi,",它将匹配所有行:

-----Message d'origine-----[\s\S]*?Hi
Run Code Online (Sandbox Code Playgroud)

有谁可以帮助我解决问题所在,以及如何使用carriage returnempty new line

谢谢 :)

python regex

-1
推荐指数
1
解决办法
45
查看次数

标签 统计

regex ×7

javascript ×3

csv ×1

eclipse ×1

emoji ×1

java ×1

performance ×1

python ×1

search-regex ×1