我正在用C编写一个简单的基于堆栈的语言,并且想知道我应该如何实现某种循环结构和/或前瞻符号.由于这个页面的代码有点长(超过200行),我把它放在GitHub存储库中.
编辑:主程序存档stack.c
.
编辑:代码只是输入words
,类似于FORTH.它使用scanf
和从左到右工作.然后它使用一系列if
s和strcmp
s来决定做什么.真的是这样的.
我有这个正则表达式,并希望添加限制总长度不超过15个字符的规则.我看到了一些前瞻性的例子,但它们并不十分清楚.你能帮我修改一下这个表达式来支持新规则.
^([A-Z]+( )*[A-Z]+)+$
Run Code Online (Sandbox Code Playgroud) 正则表达式:(?=(\d+))\w+\1
字符串:456x56
嗨,
我没有得到这个概念,这个正则表达式如何匹配字符串"456x56"中的"56x56".
但是正则表达式匹配56x56.
我有一串
foo-bar-bat.bla
Run Code Online (Sandbox Code Playgroud)
我只想比赛 foo
我有缺陷的模式匹配都foo
和bar
\w+(?=-.*\.bla)
Run Code Online (Sandbox Code Playgroud)
我该如何丢弃bar
?甚至更好,之后如何停止匹配foo
?
我正在尝试做类似的事情
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函数?
我试图用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|^)
但似乎不可能,因为"后视需要固定宽度模式".
假设我正在尝试与/dog.*lab/
此文本匹配:
"我有一只狗.我的狗是一个黑人实验室.他是在实验室里创造的."
贪婪地,它会匹配" 狗.我的狗是一个黑色的实验室.他是在实验室里创造的 ".
我想找到两边最窄的比赛.如果我使用ungreedy修饰符,
/dog.*?lab/
或者/dog.*lab/U
它会匹配较少但仍然太多:
"狗.我的狗是黑色实验室"
有没有办法从左边开始搜索我的搜索,因此只匹配" 狗是黑实验室 "?
非常感谢.抱歉这个人为的例子.
我有以下字符串:
(这一切都在一条线上)
<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) 我有以下输入文字:
@"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) 我想将信用卡号码(在我的情况下,我总是有16位数字)分成4个4位数的块.
通过积极展望,我成功地做到了这一点:
var s="4581458245834584";
var t=Regex.Split(s,"(?=(?:....)*$)");
Console.WriteLine(t);
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么结果是两个填充空单元格:
我已经知道我可以使用"删除空条目"标志,但我不是在那之后.
但是 - 如果我将正则表达式更改为(?=(?:....)+$)
,那么我得到这个结果:
题
为什么正则表达式会发出空单元格?以及如何修复我的正则表达式,以便它在第一个位置产生4个块(无需"修剪"那些空条目)
lookahead ×10
regex ×9
c# ×2
lookbehind ×2
.net ×1
c ×1
expression ×1
forth ×1
interpreter ×1
limit ×1
loops ×1
mysql ×1
perl ×1
php ×1
python ×1
whitespace ×1