正如标题所述,我正在寻找一个匹配大于给定长度的字符串的正则表达式,所以:
[\s\S]{51,}
因此符合以下条件:
Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo.
以下内容不会:
Vestibulum volutpat pretium libero.
但是,我想要一个附加条件,即应该从字符计数中排除出现在字符串末尾的特定字符序列。该序列本身可以由正则表达式定义。例如:
something\/[\w]+\/at-the-end\/[\d]+$
因此以下内容仍应匹配:
Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo.
并且以下内容仍不应:
Vestibulum volutpat pretium libero. something/random/at-the-end/12345
我在想,如果可能的话,它会以某种方式涉及环顾四周,但是我不知道如何去构建它。我正在寻找使用单个正则表达式的解决方案。
答案 0 :(得分:1)
您可以尝试使用负前瞻来调整模式匹配:
^((?!at-the-end\/\d+)[\s\S]){51,}[\s\S]*$
该模式背后的基本思想是,只要随后出现的是 not at-the-end/
,然后使用一个或多个数字,然后使用字符串。
答案 1 :(得分:1)
不太漂亮,但是此regex甚至可以在javascript中使用:
(?(DEFINE)(?<random>something\/[\w]+\/at-the-end\/[\d]+$))^(.{51,}(?P>random))|((?!.*(?P>random)).{51,})$
它将查找以随机内容结尾的行,该行至少应包含51个字符。
或者,它查找至少51个字符,但结尾处没有随机字符。
您可以here对其进行测试
使用PCRE正则表达式引擎,您可以为该随机填充使用预定义的模式。
Sub Copy_S3ToS1()
'
' Select everything from Sheet3 and copy to Sheet1
'
Sheets("Sheet3").Select
ActiveSheet.UsedRange.Copy
Application.Wait (Now + TimeValue("0:00:03"))
Sheets("Sheet1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Cells(ActiveCell.Row, "A").Activate
SendKeys "{down}"
ActiveSheet.Paste
End Sub