标签: lookahead

如何在用C编写的类似FORTH的语言解释器中实现LOOP

我正在用C编写一个简单的基于堆栈的语言,并且想知道我应该如何实现某种循环结构和/或前瞻符号.由于这个页面的代码有点长(超过200行),我把它放在GitHub存储库中.

编辑:主程序存档stack.c.

编辑:代码只是输入words,类似于FORTH.它使用scanf和从左到右工作.然后它使用一系列ifs和strcmps来决定做什么.真的是这样的.

c interpreter loops forth lookahead

6
推荐指数
2
解决办法
3951
查看次数

如何使用正则表达式前瞻来限制输入字符串的总长度

我有这个正则表达式,并希望添加限制总长度不超过15个字符的规则.我看到了一些前瞻性的例子,但它们并不十分清楚.你能帮我修改一下这个表达式来支持新规则.

^([A-Z]+( )*[A-Z]+)+$
Run Code Online (Sandbox Code Playgroud)

regex expression limit lookahead

6
推荐指数
3
解决办法
7231
查看次数

正则表达式匹配字符串 - 正向前瞻

正则表达式:(?=(\d+))\w+\1 字符串:456x56

嗨,

我没有得到这个概念,这个正则表达式如何匹配字符串"456x56"中的"56x56".

  1. 环视(?=(\ d +)),捕获456并放入\ 1,用于(\ d +)
  2. 字符,\ w +,匹配整个字符串("456x56")
  3. \1,即456,后面应该是\ w +
  4. 在回溯字符串后,它不应该找到匹配项,因为没有"456"前面有一个单词字符

但是正则表达式匹配56x56.

regex lookahead regex-lookarounds

6
推荐指数
2
解决办法
3521
查看次数

仅匹配一次模式

我有一串

foo-bar-bat.bla
Run Code Online (Sandbox Code Playgroud)

我只想比赛 foo

我有缺陷的模式匹配都foobar

\w+(?=-.*\.bla)
Run Code Online (Sandbox Code Playgroud)

我该如何丢弃bar?甚至更好,之后如何停止匹配foo

regex lookahead find-occurrences

6
推荐指数
1
解决办法
3万
查看次数

如何在mysql中编写正则表达式lookahead/lookbehind

我正在尝试做类似的事情

SELECT * FROM table WHERE column REGEXP (abc)(?=def)
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Got error 'repetition-operator operand invalid' from regexp
Run Code Online (Sandbox Code Playgroud)

因为 '?' - >参见#1139 - 从regexp获得错误'重复 - 操作数操作数无效'

我在https://dev.mysql.com/doc/refman/5.7/en/regexp.html中没有看到mysql中的等价物吗?

或者可能是另一个我还不知道的mysql函数?

regex mysql lookahead

6
推荐指数
1
解决办法
1795
查看次数

正则表达式:匹配空格之间的单词

我试图用python中的正则表达式做一些相当简单的事......这就是我至少想到的.

我想要做的是匹配字符串中的单词,如果它前面跟着一个空格.如果它位于字符串的开头,则之前不需要空格 - 如果它在结尾处,也不要搜索空格.

例:

"WordA WordB WordC-WordD WordE"
Run Code Online (Sandbox Code Playgroud)

我想要匹配WordA WordB WordE.

我只是想出了这样做的简单方法......

(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$))
Run Code Online (Sandbox Code Playgroud)

在我看来,这个简单的问题必须有一个简单的方法....我想我可以刚开始,(?<=\s|^)但似乎不可能,因为"后视需要固定宽度模式".

python regex whitespace lookahead lookbehind

6
推荐指数
1
解决办法
1941
查看次数

从左侧开始使用正则表达式(即两边最窄的匹配)

假设我正在尝试与/dog.*lab/此文本匹配:

"我有一只狗.我的狗是一个黑人实验室.他是在实验室里创造的."

贪婪地,它会匹配" 狗.我的狗是一个黑色的实验室.他是在实验室里创造的 ".

我想找到两边最窄的比赛.如果我使用ungreedy修饰符,
/dog.*?lab/或者/dog.*lab/U它会匹配较少但仍然太多:
"狗.我的狗是黑色实验室"

有没有办法从左边开始搜索我的搜索,因此只匹配" 狗是黑实验室 "?

非常感谢.抱歉这个人为的例子.

php regex lookahead

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

复杂的前瞻/不贪婪的正则表达式

我有以下字符串:

(这一切都在一条线上)

<IMG SRC="/include/images/moredetails.png" WIDTH="8" HEIGHT="7" ONMOUSEOVER="return createPopup('<b>[scan_name@user:home]:</b> <!-- #EscapedName# --><br><b>[organization@user:home]:</b><br><!-- #EscapedOrganizationPath# --><br><b>[total@user:home]:</b> <!-- #EscapedTotal# --><br><b>[high@user:home]:</b> <!-- #EscapedHigh# --><br><b>[medium@user:home]:</b> <!-- #EscapedMedium# --><br><b>[low@user:home]:</b> <!-- #EscapedLow# --><br><b>[date_last_scanned@user:home]:</b> <!-- #EscapedDate# -->');" ONMOUSEOUT="return nd(1000);"><!-- #Name# --></TD>
Run Code Online (Sandbox Code Playgroud)

第二个字符串:

<IMG SRC="/include/images/moredetails.png" WIDTH="8" HEIGHT="7" ONMOUSEOVER="return createPopup('<b>[scan_name@user:home]:</b> <!-- #EscapedName# --><br><b>??/?? ??:</b><br><!-- #EscapedOrganizationPath# --><br><b>[total@user:home]:</b> <!-- #EscapedTotal# --><br><b>[high@user:home]:</b> <!-- #EscapedHigh# --><br><b>[medium@user:home]:</b> <!-- #EscapedMedium# --><br><b>[low@user:home]:</b> <!-- #EscapedLow# --><br><b>[date_last_scanned@user:home]:</b> <!-- #EscapedDate# -->');" ONMOUSEOUT="return nd(1000);"><!-- #Name# --></TD>
Run Code Online (Sandbox Code Playgroud)

我想从第一个字符串找到所有[..]占位符,并在第二个字符串中找到他们的韩语翻译.

我编写的代码执行此操作:

while($stringA =~ /(.*?)(\[[^\]]+?\])(.*?)/g) {
 my $prefix = $1;
 my $tag = $2;
 my $suffix …
Run Code Online (Sandbox Code Playgroud)

regex perl lookahead

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

使用.NET正则表达式在引号之间解析文本

我有以下输入文字:

@"This is some text @foo=bar @name=""John \""The Anonymous One\"" Doe"" @age=38"
Run Code Online (Sandbox Code Playgroud)

我想用@ name = value语法解析值作为名称/值对.解析前一个字符串应该会产生以下命名的捕获:

name:"foo"
value:"bar"

name:"name"
value:"John \""The Anonymous One\"" Doe"

name:"age"
value:"38"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下正则表达式,它几乎让我:

@"(?:(?<=\s)|^)@(?<name>\w+[A-Za-z0-9_-]+?)\s*=\s*(?<value>[A-Za-z0-9_-]+|(?="").+?(?=(?<!\\)""))"
Run Code Online (Sandbox Code Playgroud)

主要问题是它捕获了开头的报价"John \""The Anonymous One\"" Doe".我觉得这应该是一个后视而不是前瞻,但这似乎根本不起作用.

以下是表达式的一些规则:

  • 名称必须以字母开头,并且可以包含任何字母,数字,下划线或连字符.

  • 不带引号的必须至少包含一个字符,并且可以包含任何字母,数字,下划线或连字符.

  • 带引号的值可以包含任何字符,包括任何空格和转义引号.

编辑:

以下是regex101.com的结果:

(?:(?<=\s)|^)@(?<name>\w+[A-Za-z0-9_-]+?)\s*=\s*(?<value>(?<!")[A-Za-z0-9_-]+|(?=").+?(?=(?<!\\)"))

(?:(?<=\s)|^) Non-capturing group
@ matches the character @ literally
(?<name>\w+[A-Za-z0-9_-]+?) Named capturing group name
\s* match any white space character [\r\n\t\f ]
= matches the character = literally
\s* match any white space character …
Run Code Online (Sandbox Code Playgroud)

.net c# regex lookahead lookbehind

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

使用Regex lookahead将信用卡号码拆分为4个块?

我想将信用卡号码(在我的情况下,我总是有16位数字)分成4个4位数的块.

通过积极展望,我成功地做到了这一点:

var s="4581458245834584";
var t=Regex.Split(s,"(?=(?:....)*$)");
Console.WriteLine(t);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么结果是两个填充空单元格:

在此输入图像描述

我已经知道我可以使用"删除空条目"标志,但我不是在那之后.
但是 - 如果我将正则表达式更改为(?=(?:....)+$),那么我得到这个结果:

在此输入图像描述

为什么正则表达式会发出空单元格?以及如何修复我的正则表达式,以便它在第一个位置产生4个块(无需"修剪"那些空条目)

c# regex lookahead

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