我正在尝试使用语法高亮构建一个非常具体的编辑器.我用简单的正则表达式制作了所有简单的东西,但是现在我想用正则表达式添加一些高级功能.
在这种情况下,我想知道是否在任何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,还是我应该放弃这个想法,只考虑两步法?
我正在尝试re.split从日志文件中获取BCF#,BTS#和LAC,CI,其中包含标题和常规结构:
==================================================================================
RADIO NETWORK CONFIGURATION IN BSC:
E P B
F T R C D-CHANNEL BUSY
AD OP R ET- BCCH/CBCH/ R E S O&M LINK HR FR
LAC CI HOP ST STATE FREQ T PCM ERACH X F U NAME ST
/GP
===================== == ====== ==== == ==== =========== = = == ===== == === ===
BCF-0010 FLEXI MULTI U WO 2 LM10 WO
10090 31335 BTS-0010 U WO 0 0
KHAKHAATT070D BB/-
7
TRX-001 U WO 779 0 …
Run Code Online (Sandbox Code Playgroud) 我需要从一个"取消读取"字符InputStreamReader
.为此目的,我想用mark
和reset
,但markSupported
返回false
的InputStreamReader
类,因为它没有保持字符的内部缓冲和/或队列.
我知道BufferedInputStream
和PushbackInputStream
,但由于它们缓冲字节的基础上,同时也不是适当的在这里我需要的字符.
Java是否提供可以解读字符的缓冲字符阅读器?实际上,让我进一步限制,我只需要取消读取单个字符(用于超前目的).我真的需要保持自己的前瞻性吗?
(如果你能做出更好的头衔,请做)
嗨,
我需要确保字符串匹配以下正则表达式:
^[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)
这里的最后一个要求是它们必须(如果可能的话)合并为单个表达式.
我想知道是否有办法解决这个问题
var string = "foo::bar"
Run Code Online (Sandbox Code Playgroud)
获取字符串的最后一部分:"bar"
使用正则表达式.
我试图做好预测,但却无法掌握它们做到这一点.
-
UPDATE
也许一些例子会使问题更加清晰.
var st1 = "foo::bar::0"
match should be 0
var st2 = "foo::bar::0-3aab"
match should be 0-3aab
var st3 = "foo"
no match should be found
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何使用正向前瞻创建正则表达式.我们的想法是在长字符串中为每两个字符添加两个字符串.即
"090909" => "XX09XX09XX09"
Run Code Online (Sandbox Code Playgroud)
这段代码:
String s = "090909";
String ns = s.replaceAll("(?=\\d\\d)", "XX");
Run Code Online (Sandbox Code Playgroud)
......不起作用; 输出是XX0XX9XX0XX9XX09
.但是这段代码有效:
String s = "090909";
String ns = s.replaceAll("(?=09)", "XX");
Run Code Online (Sandbox Code Playgroud)
我很困惑如何为每两个字符提出一个表达前瞻性的表达方式.我错过了一些界限吗?
假设我有一个字符串"\"Bob \",\"1 \",\"Mary \",\"2 \"".是否可以只删除数字周围的引号而不是字母?我已经尝试了前瞻/后退,但是后视的非可变长度搞砸了我,我不知道如何解决问题.谢谢.
我需要一个python中的正则表达式,匹配任何被2个下划线包围的字符.含义,含义
__a__
Run Code Online (Sandbox Code Playgroud)
将匹配"a",但是
___a___
Run Code Online (Sandbox Code Playgroud)
不会匹配.它需要支持重叠匹配,这样
__a__d___b___e__c__
Run Code Online (Sandbox Code Playgroud)
将返回"ac",因为a被双下划线包围,但d,e在它们旁边有一个三重奏,而b在两侧都有三重下划线.我现在有什么
(?<=[_]{2})(.)(?=[_]{2})
Run Code Online (Sandbox Code Playgroud)
它解决了重叠,但不是上面例子中的"确切2"它返回"adbec"
如果下面的缩进行中还有另一个已定义的文本(此处为“交换端口模式访问”),我想匹配以特定字符串(在此示例中为“ interface”)开头的行。
示例数据:
interface GigabitEthernet1/0/1
description abc
bla
switchport mode access
xyz
abc
interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/3
xyz
abc
interface GigabitEthernet1/0/4
description Test
switchport mode access
xyz
abc
interface GigabitEthernet1/0/5
description
Run Code Online (Sandbox Code Playgroud)
应该匹配:
interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/4
Run Code Online (Sandbox Code Playgroud)
我试过了:
interface GigabitEthernet1\/0\/[0-9](?=(\n|.)*switchport mode access)
Run Code Online (Sandbox Code Playgroud)
但这会检查接口下的所有行,因此它确实匹配:
interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/3
interface GigabitEthernet1/0/4
Run Code Online (Sandbox Code Playgroud)
如何使前行仅在行不以空格开头之前起作用?
我有一长串这样的文字:
text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'
Run Code Online (Sandbox Code Playgroud)
我想得到这个输出:
phrases = ['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
' Los puntos suspensivos no los quiero detectar.',
' A eso me refiero.']
Run Code Online (Sandbox Code Playgroud)
问题是第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开的正则表达式。有没有办法用正则表达式来实现?
(?= ...)
积极前瞻断言.如果包含的正则表达式(此处由...表示)在当前位置成功匹配,则成功,否则失败.但是,一旦尝试了包含的表达式,匹配的引擎就不会前进 ; 在断言开始的地方尝试了模式的其余部分.
我试图理解Python中的正则表达式.你能帮我理解第二句话,特别是粗体字吗?任何例子将不胜感激.
下面是我正在使用的一些数据的示例.我已经阅读了一些涉及此主题的帖子,以及在regex101上尝试了一段时间.
BotInfo[-]: Source IP:[10.1.1.100] Target Host:[CentOS70-1] Target OS:[CentOS
7.0] Description:[HTTP Connection Request] Details:[10.1.1.101 - - [28/May
/2013:12:24:08 +0000] "GET /math/html.mli HTTP/1.0" 404 3567 "-" "-" ] Phase:
[Access] Service:[WEB]
Run Code Online (Sandbox Code Playgroud)
目标是拥有两个捕获组.一个用于标记(例如,源IP,目标主机,描述等),另一个用于最外面的方括号中包含的内容.
它是"最外层"的东西,因为Details标签的内容中有方括号.
这是我目前在所述正则表达式上取得的进展.我正在使用/ g标志:
\s?([^:]+):\[(.*?(?=\]\s.*?:\[))\]
Run Code Online (Sandbox Code Playgroud)
除了边缘情况之外,它处理所有事情(它比需要的更复杂,因为我一直在努力让边缘情况起作用).
我当前的lookahead(\]\s.*?:\[
),在高级别,是匹配最后左括号,然后匹配下一个标签.另一个问题是,在最后一场比赛中失败,因为没有以下标签.
编辑:请求成功输出的示例.使用提供的数据,目标是有两个捕获组产生这些对:
MATCH 1
1. `Source IP`
2. `10.1.1.100`
MATCH 2
1. `Target Host`
2. `CentOS70-1`
MATCH 3
1. `Target OS`
2. `CentOS 7.0`
MATCH 4
1. `Description`
2. `HTTP Connection Request`
MATCH 5
1. `Details`
2. `10.1.1.101 - - [28/May/2013:12:24:08 +0000] "GET …
Run Code Online (Sandbox Code Playgroud) 鉴于下面的代码,我想匹配第一次form
出现.我发现负面前瞻?!
可能用于实现这一目标,但它不起作用.我的正则表达式有什么问题?
#test
$test = "<form abc> foo </form> <form gg> bar </form>";
$test =~ m/<form[^>]*abc[^>]*>(?!.*form>.*)form>/s;
print $&;
Run Code Online (Sandbox Code Playgroud) lookahead ×13
regex ×12
python ×4
lookbehind ×3
java ×2
.net ×1
c# ×1
inputstream ×1
javascript ×1
match ×1
parsing ×1
perl ×1
ungetc ×1