问题标签 [lookahead]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Spirit Qi sequence parsing issues
I have some issues with parser writing with Spirit::Qi 2.4.
I have a series of key-value pairs to parse in following format <key name>=<value>
.
Key name can be [a-zA-Z0-9]
and is always followed by =
sign with no white-space between key name and =
sign. Key name is also always preceded by at least one space.
Value can be almost any C expression (spaces are possible as well), with the exception of the expressions containing =
char and code blocks { }
.
At the end of the sequence of the key value pairs there's a {
sign.
I struggle a lot with writing parser for this expression. Since the key name always is preceded by at least one space and followed by =
and contains no spaces I defined it as
Value can be almost anything, but it can not contain =
nor {
chars, so I defined it as:
I thought about using look-ahead's like this to catch the value:
But it won't work, for some reason (seems like the ValueExpression
greedily goes up to the =
sign and "doesn't know" what to do from there). I have limited knowledge of LL parsers, so I'm not really sure what's cooking here. Is there any other way I could tackle this kind of sequence?
Here's example series:
Additional info: since this is a part of a much larger grammar I can't really solve this problem any other way than by a Spirit.Qi parser (like splitting by '=' and doing some custom parsing or something similar).
Edit:
I've created minimum working example here: http://ideone.com/kgYD8
(compiled under VS 2012 with boost 1.50, but should be fine on older setups as well).
c# - 如何删除字符串C#之间的一些文本
我有这样的文字:
LINE\r\n 5\r\n11DA3\r\n330\r\n2\r\n100 \r\nAcDbEntity\r\n 8\r\n0-FD\r\n 6\r\nHIDDEN\r\n100
看一下粗体字。我想替换 5\r\n 和 \r\n100 之间的文本。我试过这段代码:
但它不起作用。我的代码有问题吗?我确定 (\S+?) 是问题所在。有什么办法解决吗?
python - Python(Perl 类型)正则表达式前瞻/后瞻
考虑一个字符串s = "aa,bb11,22 , 33 , 44,cc , dd "
。
我想使用Python中的正则表达式模块s
拆分为以下标记列表,这类似于 Perl 提供的功能:
"aa,bb11"
"22"
"33"
"44,cc , dd "
笔记:
- 我想用逗号标记,但前提是这些逗号的两边都有数字。
- 我要定位的这些“数字逗号”周围的任何(可选)空格都应该在结果中删除。可选的空格可能不止一个空格。
- 任何其他空格都应保留在原始字符串中的显示位置。
到目前为止,我最好的尝试如下:
但这会打印:
这与我想要的很接近,因为我想要的 4 件事都包含在列表中。我可以通过并摆脱任何空字符串和任何仅包含空格/逗号的字符串,但我宁愿有一个单行正则表达式来为我完成所有这些。
有任何想法吗?
regex - 改进正则表达式以匹配包含至少 N 个字母的字母数字单词的 url
我已经按照下一个模式完成了一个正则表达式来匹配 url:
在哪里
part1:是常用词
part2:是带下划线的字母数字词,至少包含 2 个字母
part3:是数字词,有 1 到 10 位数字
例如,一个有效的 url 将是:
所以第 1 部分
= 新闻
第 2 部分 = my_news_title_200_is
第 3 部分 = 12345
我来到了这个:
用类表示:
但我想有更好的方式来表达 RE 模式的第 2 部分。
提前致谢。
java - Java 中的正则表达式环视构造:建议需要优化
我正在尝试在逗号分隔的列表中搜索文件名:
text.txt、temp_doc.doc、template.tmpl、empty.zip
我使用 Java 的正则表达式实现。输出要求如下:
- 只显示文件名而不是它们各自的扩展名
- 排除以“temp_”开头的文件
它应该看起来像:
文本
模板
空的
到目前为止,我已经设法编写或多或少令人满意的正则表达式来应对第一项任务:
我相信使其符合第二个要求的最佳选择是使用环视构造,但不确定如何编写可靠和优化的表达式。虽然下面的正则表达式似乎确实可以满足要求,但如果没有其他原因,它显然是一个有缺陷的解决方案,它依赖于显式的最大文件名长度。
PS我只研究了几天的正则表达式,所以请不要嘲笑这个新手风格的过于复杂的代码:)
regex - 正则表达式匹配不以模式结尾的字符串?
我正在尝试形成一个正则表达式,它将匹配不以 DOT FOLLOWED BY NUMBER 结尾的字符串。
例如。
我想匹配前三个。
我尝试修改这篇文章,但它对我不起作用,因为数字可能有可变长度。
有人可以帮忙吗?
regex - 如何有效地匹配 Perl 正则表达式中已经匹配的内容?
我编写了一个正则表达式来验证必须遵守以下规则的字符串:
- 必须至少为一个字符
- 不得包含空白字符
- 第一个字符不能是标点符号
- 最后一个字母不能是标点符号
- 不能以标点符号结尾,后跟数字
- 所有其他字符可以是除
/[:@#]
.
这是正则表达式:
看到有什么遗漏吗?不执行规则#5。我一直在通过编写如下代码来执行它:
有很多地方我必须这样做,所以我宁愿这一切都在一个正则表达式中完成。问题是:如何?什么正则表达式会拒绝诸如“foo,23”之类的值?
php - PHP preg_replace 崩溃。仅适用于正则表达式大师
你好吗?我会直奔主题。
我正在使用一个递归正则表达式,它基本上删除了单个或嵌套的 <blockquote> tags。我只需要删除普通的 <blockquote> ... </blockquote> 文本,无论是否嵌套,并留下这些之外的任何内容。
这个正则表达式完全按照我的意愿完成工作(注意使用前瞻和递归)
但它有一个大问题:当 $comment 很大(超过 3500 个字符长)时,apache 崩溃(我假设分段错误)。
我需要一个解决问题的方法,但要解决崩溃,使用更好的正则表达式或自定义函数也可以完成这项工作。
如果您只是对如何删除嵌套的特定标签有想法,我们欢迎您。
先感谢您
regex - 如何将 html 标签与 perl 正则表达式匹配?
鉴于下面的代码,我想匹配第一次form
出现。我发现?!
可以使用负前瞻来实现这一目标,但它不起作用。我的正则表达式有什么问题?
java - 如何读取同一 InputStream 上的不同数据组,为每个数据使用不同类型的 InputStream?
我需要以各种方式在 Java 中保存一些数据,到 a File
,到 a String
,到System.out
... 最后我用 3 种方法做几乎相同的事情。OutputStream
因此,我将它们更改为以 an作为参数的单个方法。我在单个 OutputStream 中写了一些东西,例如一些文本、一个序列化对象、另一个序列化对象、一些数字数据......
但现在我被困住了。我忽略了一个事实,即我无法区分所写的不同内容。我为数据创建了一个InputStream
。我Scanner
首先在该流上使用 a 来读取文本,然后尝试使用 ObjectInputStream 来读取序列化对象,但我得到一个EOFException
.
我猜扫描仪会提前读取。如何防止扫描仪提前读取。
或者更确切地说,我如何使用适当的 InputStream 为每组数据读取每组数据。