php - 包含星号的匹配字符串
问题描述
我知道这听起来很容易,但我被困住了。
我想匹配带有星号的字符串*
。
本质上,我希望允许在前/后/两者都有星号但中间没有星号的字符串:(
最多会有 2 个星号,前面和两者但没有中间,并且存在字符串是必须的)
允许:
*字符串*
*字符串
字符串*
字符串
否定:
*str*ing*
*str*ing
str*ing*
str*ing
*string**
**
*
我试过了
^\\*?((?!\\*).)*\\\*?$
并以某种方式起作用。
有人可以解释这是如何工作的吗?
并验证这是否正确,因为 regex..hard to debug and check..
解决方案
您可以使用以下正则表达式:
^\*?\w+\*?$
演示:https ://regex101.com/r/vwuXv2/1/
说明:
^
锚强加一行的开头\*?
a*
最多出现一次\w+
文本中至少出现 1 个单词字符([a-zA-Z0-9_] 可以根据需要随意更改)\*?
a*
最多出现一次$
线锚的末端
现在,如果您对部分行匹配感兴趣,可以使用以下正则表达式:
(?<=^| )\*?\w+\*?(?=$| )
演示:https ://regex101.com/r/vwuXv2/2/
解释:你添加了lookbehind,lookahead断言。
根据评论中的要求添加日文字符(添加[^*\s]
您需要从单词中排除的所有字符):
^\*?[^*\s]+\*?$
演示:https ://regex101.com/r/RaCmwt/1/
或者
^\*?[[:alpha:]]+\*?$
(启用 unicode 标志)或只是
^\*?\p{L}+\*?$
推荐阅读
- python - 如何使用colab在python中合并两个excel列
- javascript - 如何从开发人员控制台将网络响应复制到 chrome/edge 中的剪贴板?
- css - SASS 变量到 CSS 变量 (gulp-sass)
- java - 使用spring在单个事务中向kafka发送消息列表
- tensorflow - 从罗伯塔模型中绘制混淆矩阵
- java - Kafka - 基于时间戳恢复数据而不影响工作消费者
- firebase - Flutter:在本地保存通知
- java - 如何在 SDK Q 及更高版本的下载文件夹中使用 FileProvider 和创建的 PFD
- entity-framework-core - 如何在实体框架核心中使用单个 dbcontext 处理同一数据库的不同实例
- security - GlobalPlatformPro 如何做关键多元化