我想.java
使用正则表达式搜索文件,不知道是否有一种方法可以检测到文件中找到匹配项的行。
例如,如果我寻找hello
与Java正则表达式匹配的内容,是否可以通过某种方法告诉我这些匹配内容位于第9、15和30行?
可能…使用Regex Trickery!
免责声明:这并不意味着是一个实际的解决方案,而是说明了使用出色的正则表达式hack扩展的一种方式。而且,它仅在允许捕获组引用自己的正则表达式引擎上起作用。例如,您可以在Notepad
++中使用它,因为它使用了PCRE引擎,但在Java中却没有。
假设您的文件是:
some code
more code
hey, hello!
more code
在文件底部,粘贴:1:2:3:4:5:6:7
,其中:
在代码的其余部分中找不到分隔符,其中数字至少与行数一样高。
然后,要获得第一个的行hello
,可以使用:
(?m)(?:(?:^(?:(?!hello).)*(?:\r?\n))(?=[^:]+((?(1)\1):\d+)))*.*hello(?=[^:]+((?(1)\1)+:(\d+)))
组2将捕获包含hello的第一行的行号。
(?>\1?)
。为了实现多样性,我改用了有条件的。说明
hello
并捕获到第2组的行号(?:^(?:(?!hello).)*(?:\r?\n))
匹配不包含hello的行。(?=[^:]+((?(1)\1):\d+))
行使我们到达第一个 :
,[^:]+
然后将外部括号((?(1)\1):\d+))
捕获到第1组中…如果设置了(?(1)\1)
第1组,则设置了第1组,然后不管冒号和一些数字如何。这样可确保每次跳线匹配一条线时,组1都会扩展到:1:2:3:4:5:6:7
*
跳线次数达到零次或多次.*hello
与该行匹配 hello
(?=[^:]+((?(1)\1)+:(\d+)))
行与行跳过程序中的前行相同,除了这次将数字捕获到组2中:(\d+)
出于某种原因,上面的正则表达式没有捕捉带撇号的名称。 例如:D'STALL先生不匹配。任何关于regex模式的帮助都将不胜感激。 代码所做的是获取输入并用XML标记它。诸如以下内容: 正则表达式与上述段落不匹配。
问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-
问题内容: 我有类似的东西 商店 结束行像1商店..我想匹配,它使用python正则表达式。 我尝试了类似的方法, 但是没有用。 编辑:添加代码,我试过 请帮助。 谢谢吉乔 问题答案: 或多或少直接回复您的评论 尝试这个 解决方案是使用,而不是使用后者,因为后者试图将整个字符串与regexp匹配,而前者只是试图在字符串内部查找与表达式匹配的子字符串。
我们得到了一些这样的内容:
有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。
我正在尝试匹配以下正则表达式: 换句话说,一个单词边界后跟上面的任何字符串(可选地跟一个句点字符),后面跟一个单词边界。 我也在regex101上尝试过这一操作,但与数仍然不匹配:https://regex101.com/r/klkmwl/1 转义符并没有什么区别,我已经尝试使用十六进制转义序列来代替和符(如本问题所建议的)。为什么这不匹配?