php - 如何重复正则表达式的某些部分
问题描述
输入字符串是:
约翰的三明治好坏
表达 :
J.+(\'s|\') sandwich.* are (good|bad)
PHP代码:
preg_match_all("/ Expression /Us", Input string , $matches);
虽然它会在输入字符串中匹配's和good,但我也想通过重复表达式的某些部分来匹配bad(good|bad)
,这将是.
我怎么能做这样的工作?
解决方案
您可以使用正则表达式:
.*?(\bgood\b|\bbad\b)\s?((?1))?
.*?
懒惰地匹配任何东西。(\bgood\b|\bbad\b)
捕获组。捕获:字边界
\b
,后跟good
,然后是字边界\b
|
或者。\b
, 之后是bad
, 之后是单词边界\b
。
\s?
可选地匹配空格。((?1))?
可选地递归第一个模式并在第二个捕获组中捕获。
你可以在这里测试这个正则表达式。
good
并bad
分别在捕获组一和二中捕获。
php片段:
<?php
$str = "John's sandwiches are good bad";
$re = "/.*?(\bgood\b|\bbad\b)\s?((?1))?/";
if (preg_match_all($re, $str, $matches)) {
print_r($matches[1]);
print_r($matches[2]);
}
推荐阅读
- python - Azure Kudu 在 D:\home\python364x86\Lib 中安装 python 库
- c# - 跨子域共享身份登录 Cookie
- python - 禁用自动白平衡并使用python设置固定值
- python - 如何使两个同名音频中的样本数量相等?
- accessibility - WCAG AA 对非文本元素和 UI 控件的对比度要求
- google-maps - 使用 Flutter Google Maps 插件将所有标记保持在视图中
- kotlin - 如何使用 Exposed 建立 OneToOne 关系
- vue.js - Vuex 是否可以在 Vue 组件中管理本地状态
- python - 爬行 Selenium Python
- java - 如何在java中创建列表数组