我正在尝试匹配此类字符串(5种不同的字符串)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>org.example</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>child</artifactId>
<repositories>
<repository>
<id>Artifactory-Releases</id>
<url>http://artifactory:8081/artifactory/dev</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>Artifactory-Snapshots</id>
<url>http://artifactory:8081/artifactory/dev</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
</project>
n在哪里是可变的,但是其他的零是常数,n也不能是零。
我需要获得这样的结果,因为我使用替代运算符https://regex101.com/r/vE9hL4/1
进行了硬编码我需要捕获'|中的所有数字|”就像我的正则表达式一样。 请帮助简化它。
答案 0 :(得分:2)
首先,我做匹配;由管道字符包围的一个或多个正数,可选地后跟由管道字符包围的零。
if (preg_match_all($re, $subject, $matches)) {
$numbers = preg_split('/\|/', $matches[1][0], -1, PREG_SPLIT_NO_EMPTY);
}
如果匹配,您可以根据管道字符本身进行拆分:
{{1}}
答案 1 :(得分:1)
^\|([0-9]*)\|(?:\|(0)\|\|(0)\|\|(0)\|\|(0)\||(?:\|([1-9]*)\|\|(0)\|\|(0)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|(0)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|\|(0)\|)|(?:\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|\|([1-9]*)\|)|)$