Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅在句子中间匹配的正则表达式_Php_Regex - Fatal编程技术网

Php 仅在句子中间匹配的正则表达式

Php 仅在句子中间匹配的正则表达式,php,regex,Php,Regex,我正在尝试创建一个regexp,以便仅在句子的中间处匹配独立字母I和V 我使用preg_match_all,因为可能有多个匹配 如果需要的话,我可以创建多个regexp,也就是说,如果更清楚的话,可以将事情分割开来,而不是只创建一个复杂的regexp 字符串永远不会包含换行符-它永远不会是多行 示例: Materialy I regionalʹnoĭ将创建匹配,并捕获I Materialy V regionalʹnoĭ将创建匹配,并捕获V V strane lʹdov-将不创建匹配,因为V位于句

我正在尝试创建一个regexp,以便仅在句子的中间处匹配独立字母I和V

我使用preg_match_all,因为可能有多个匹配

如果需要的话,我可以创建多个regexp,也就是说,如果更清楚的话,可以将事情分割开来,而不是只创建一个复杂的regexp

字符串永远不会包含换行符-它永远不会是多行

示例:

Materialy I regionalʹnoĭ
将创建匹配,并捕获
I

Materialy V regionalʹnoĭ
将创建匹配,并捕获
V

V strane lʹdov
-将不创建匹配,因为V位于句子字符串的开头

材料。V dvukh tomakh
不会创建匹配,因为V位于句子的开头,即在点空格之后

John i Vladimir
为V创建匹配,因为V不是独立的

johni-Vladimir
不会为i创建匹配,因为i是小写

< V > Srang-Lodov - Materialy i区域不“< < /代码>将捕获<强> < < /强> <代码> i>代码>,因为只有在句子的中间。


我一直在尝试^(?:(?![]等的各种组合,但无法实现这一点。

下面是一个满足您的用例的简单正则表达式

preg_match('/.*[^\.]\h([VI])\h.*/', 'V strane lʹdov - Materialy I regionalʹnoĭ');
你可以用

'~[?!.]\s*[VI](*SKIP)(*F)|(?<=\s)[VI](?=\s)~'

“~[?!.]\s*[VI](*跳过)(*F)|(?是否要
”~(?你需要正则表达式为什么不找到'I'或'V'呢?你应该展示你的尝试,以及结果。谢谢,Wiktor-这似乎是基于演示的工作,我现在只是想理解它。你可以补充一下,作为一个答案,这样我可以确保你得到声誉分数吗?@WiktorStribiżew你真的是一个正则表达式的上帝!你的正则表达式会ld仍然在@N69S行的开头捕获
V
否,不可能是正确的在线演示。OP不是对多行文本使用正则表达式,而是对独立字符串使用正则表达式。我可能应该注意到,该字符串永远不会包含换行符-它永远不会是多行。@N69S如果需要匹配水平空格,则d让它像regex101一样适用于多行文本,只需将所有
\s
替换为
\h
。就像我在我的中所做的那样。再次感谢-这一切都非常令人印象深刻。尽管使用regexps多年了,但我还没有使用
的经验(?这是一个不合适的解决方案。1)
*
开始时,由于回溯过多,性能会大大降低,特别是对于较长的字符串,2)文字空格不考虑其他空格字符,3)如果在
V
I
之前有两个或更多空格,正则表达式将失败,4)
句尾标点符号不被考虑。@WiktorStribiżew我确实说过它满足提供的用例。那么,如果
+
匹配所有用例,这是否意味着它是可以的?这是对提供的信息的有效回答。无论如何,感谢您的评论
'~(?<=\s)(?<![?!.]\s)[VI](?=\s)~'