- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我试图了解如何.{n}
和 ?<option>:
工作于 Regexp
在 Ruby 1.9.3 环境中。但无法理解以下代码如何产生输出:
irb(main):001:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{2}(?m:.)\Z/
=> ["fin\n", "fin\r\n", "find"]
irb(main):002:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
irb(main):003:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> []
irb(main):010:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
irb(main):011:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(m:.)\Z/
=> []
irb(main):012:0> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> []
IRB
中生成上述输出的吗?终端?
irb(main):014:0> %W{fin fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> ["fin"]
irb(main):015:0> %W{fin fi\n\n \n\n fin\r find}.grep /f.(?m:.)\z/
=> ["fin"]
irb(main):016:0> %W{fin fi\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> ["fin", "fi\n"]
irb(main):017:0> %W{fin fi\n \n\n fr\n find}.grep /f.(?m:.)\z/
=> ["fin", "fi\n", "fr\n"]
irb(main):018:0>
最佳答案
{n}
表示“重复前一个原子 n
次”。在正则表达式中,原子是一个独立的单元。所以单个字符是一个原子。一个点也是如此。一个组也是一个原子(包含其他原子),就像一个字符类。所以.{n}
表示“匹配 n
个字符”(因为 .
表示“匹配任何字符”)。
请注意 {n}
不像反向引用,因为它不必在每次重复时匹配相同的文本。 .{5}
行为与 .....
完全一样.
这个构造也更强大。它可以采用两个数字,并且匹配整个范围的重复计数。所以.{3,5}
表示“匹配 3 到 5 个字符”。和 .{3,}
表示“匹配 3 个或更多字符”。 ?
可以换成{0,1}
, *
与 {0,}
, 和 +
与 {1,}
如果你愿意。?<option:
其实不是一回事。它是 (?<option>:<pattern>)
,这会打开 <option>
中列出的所有标志在 <pattern>
期间.它就像一个组,只是它实际上并不创建反向引用。所以表达式 (?m:.)
意思是“匹配一个字符,就像标志 m
被打开一样”。鉴于 m
的行为正如 nhahtdh 在评论中所说的“匹配\n”,表达式 .(?m:.).
意思是“匹配除换行符之外的任何字符,然后是任何字符,然后是除换行符之外的任何字符”。
这种构造有两个好处。首先,它允许您只将一个标志应用于模式的一部分,这偶尔会很有用。其次,如果您将整个模式包装在这个构造中,那么您就可以控制应用于正则表达式的标志,而不管该表达式在哪里使用。当您以用户身份提供正则表达式并且无法控制程序源时,这很有用。
让我们来看看你给出的例子:
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{2}(?m:.)\Z/
=> ["fin\n", "fin\r\n", "find"]
/f.{2}(?m:.)\Z/
表示“匹配 f,后跟 2 个任何字符(但换行符),后跟任何字符,并 anchor 定到字符串的末尾或刚好在换行符之前”。
fin
匹配
f.{2}
.
(?m:.)
匹配
\n
在第一个,
\r
在第二个,和
d
在第三。和
\Z
匹配第一个字符串的结尾,就在第二个换行符之前,以及第三个字符串的结尾。
fi\n\n
不匹配,因为第一个
\n
这里不能匹配
.
来自
.{2}
没有
m
旗帜。
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
fi
匹配
f.{1}
在这两种情况下。
(?m:.)
匹配
n
和
\n
, 和
\Z
在这两种情况下,在换行符之前匹配。
fin\r\n
不匹配,因为
\Z
只会在字符串中的最后一个换行符之前匹配,而不是在 CRLF 对之前匹配。和
find
不匹配,因为没有什么可以匹配
d
.
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.{1}(?m:.)\Z/
=> []
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\Z/
=> ["fin\n", "fi\n\n"]
.
和
.{1}
是一样的。事实上,
{1}
总是可以从任何正则表达式中剥离而不改变任何东西。
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(m:.)\Z/
=> []
?
在这个模式中,改变了
(m:.)
的含义.这不再更改选项。现在它只是一个匹配模式
m:.
的捕获组,这当然不会出现在您的输入中。
> %W{fin\n fi\n\n \n\n fin\r\n find}.grep /f.(?m:.)\z/
=> []
\Z
至
\z
这里。这两者的区别是
\Z
可以在尾随换行符之前匹配,但
\z
必须只匹配字符串的结尾。如果无法在尾随换行符之前匹配,则此处的所有输入都不匹配。但是,例如,如果您有
fin
(不带换行符)或
fi\n
(没有第二个换行符)它会起作用。
关于ruby - 如何 .{n} 和 ?<option> : works in `Regexp` on Ruby 1. 9.3 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385763/
我经常使用 var options = options || {} 作为默认为空对象的方式。它通常用于初始化选项对象,以防它未在函数调用的参数中传递。 问题是我在几个地方(博客文章、源代码)读到opt
我是Python中Rust的新手。这是我学习Rust的第四天。 在第一个问题Type casting for Option type之后,我有一个跟语法match和所有权概念有关的后续问题。 首先,我
我正在学习 Ray Wenderlich。我遇到了闭包语法错误。我想知道 Xcode 提示是什么意思? Xcode 报告如下: /Users/.../FlickrPhotosViewControlle
使用 Python 编写命令行界面 (CLI) 时 click library , 是否可以定义例如三个选项,其中仅当第一个(可选)未设置时才需要第二个和第三个选项? 我的用例是一个登录系统,它允许我
我有一个这样的 JPA 查询。 PersonRepository.java public Optional> findByStatus(int status); 人员服务.java System.ou
我遇到了很多地方,我有类似的东西 def f(s: String): Option[Long] = ... def g(l: Long): IO[Option[Wibble]] = ... val a
我有一个results: List[Future[Option[T]]]其中包含(并行)计算。 我想获得第一个非None尽快出结果,或者返回None如果所有计算都返回 None . 目前,我正在这样做
我正在尝试加载一个简单的 Listbox组件来自 @headlessui/react . 选择.tsx type Option = { id: number name: string
如何将Future[Option[Future[Option[X]]]]转换为Future[Option[X]]? 如果它是 TraversableOnce 而不是 Option 我会使用 Futur
Haskell、Rust 等语言提供了一个 Maybe 或 Option 类型。即使在 Java 中,也有一个 Optional 现在打字。 为简单起见,我将在剩下的问题中将此类型称为“选项类型”。
当我尝试在 SQL 中存储一个 XML 而不是一个空元素时,SQL 只是更改它并仅使用一个元素标签来存储它。例如,要存储的 XML 是: ROGER 然后Sql存起来就好了
使用这个非常好的命令行解析器 Argo(仅 header C++ 库)我遇到了一个小问题。请参阅:https://github.com/phforest/Argo Argo 返回:'Error: Un
我是来自 Java 背景的 Scala 新手,目前对考虑 Option[T] 的最佳实践感到困惑. 我觉得用 Option.map只是更实用和美观,但这不是说服其他人的好理由。有时, isEmpty
这个问题在这里已经有了答案: Chaining Optionals in Java 8 (9 个回答) Optional orElse Optional in Java (6 个回答) Functio
Optional::stream如果存在,则返回一个包含该值的 Stream,否则返回一个空流。所以对于 Stream> optionals , optionals.flatMap(Optional:
我使用箭头键作为输入,在 printf 菜单中上下移动 printf 箭头(“==>”)。 我正在使用一个函数来计算箭头应该在的位置,并使用 switch case 和 printf("\n==>")
这个问题在这里已经有了答案: What does the construct x = x || y mean? (12 个答案) 关闭 9 年前。 如我的问题标题所述,我最近偶然发现了这个变量声明:
这个问题在这里已经有了答案: BackboneJS: What is options || (options = {}); in Backbone source code (1 个回答) 关闭 8
我有这个简单的语法: word = Word(alphanums + '_') with_stmt = Suppress('with') + OneOrMore(Group(word('key') +
使用 Cucumber 和 SitePrism 编写测试,我在页面上有以下 HTML... Select a Status Active Product Inactive Prod
我是一名优秀的程序员,十分优秀!